0%
基础知识
客户端/服务器架构
- mysqld:MySQL服务器程序,运行该程序可以启动一个服务器进程
- mysql:MySQL客户端程序,运行该程序可以发送请求并接收服务器的处理结果
- 客户端与服务器的连接
- 本质:进程间通信
- 网络通信协议:TCP/IP
- 服务器默认端口:3306
- 服务器处理的流程:连接管理 -> 解析与优化 -> 存储引擎
- 连接管理:客户端可以携带主机信息、用户名与密码等信息,采用TCP/TP、命名管道或者共享内存、UNIX套接字等方式连接服务端。每当有客户端信息验证通过,连接到服务器端进程时,服务器端就会创建一个线程进行交互;当通信结束后,并不会立即销毁该线程,而是缓存起来,当有新的客户端连接时,将这个线程分配给新的客户端
- 解析与优化:查询缓存 -> 语法解析 -> 查询优化
- 查询缓存 – 同样的请求会从缓存中查找结果,但是如果两个请求有任何字符上的不同,都会重新计算
- 查询优化 – 优化的结果是生成一个执行计划,可以通过
explain
来查看
- 存储引擎:默认引擎是InnoDB
- 实现效果:客户端向服务器发送一段文本(SQL语句),服务器进程处理后再向客户端返回一段文本
基本配置
- 启动选项
- 命令行修改
仅对当次启动生效
- 配置文件修改
无论是Linux系统还是Windows系统,都有多个对应的配置文件查找路径,且路径之间有优先级
- 系统变量
- 系统变量有不同的作用范围,包括GLOBAL和SESSION
- 大部分的系统变量可以当作启动项来设置,但是有些系统变量是程序运行过程中自动生成,无法修改
字符集和比较规则
- 将字符映射成二进制称为编码,反之为解码。人们抽象出一个字符集的概念来描述某个字符范围的编码规则
常见字符集:ASCII、ISO8859-1、GB2312等
- 每个字符集有多个比较规则,比如是否区分重音、是否区分大小写等
数据存放
数据目录
- MySQL会将数据存放到数据目录下,可以在客户端
show variables like 'datadir'
来查看数据目录
- 数据目录中存放着系统数据库、用户自定义的数据库以及一些系统相关文件
mysql
系统数据库,在数据目录下有对应的子文件夹。该数据库存储MySQL的用户账户和权限信息、一些存储过程和事件的定义信息、一些运行过程中产生的日志信息、一些帮助信息以及时区信息等。
performance_schema
系统数据库,在数据目录下有对应的子文件夹。该数据库主要保存MySQL服务器运行过程中的状态信息,包括统计最近执行了哪些语句、在执行过程的每个阶段花费了多长时间、内存的使用情况等。
information_schema
系统数据库,在数据目录下没有对应的文件夹。该数据库保存着MySQL服务器维护的所有其他数据库的信息,比如有哪些表、视图、触发器、列、索引等。并不是真实的数据,而是以描述性信息的形式存在,也称之为元数据。
sys
系统数据库,在数据目录下有对应的文件夹。主要通过视图的形式把information_schema和performance_schema结合起来,让开发人员更方便地了解MySQL服务器的性能。
用户数据库
用户自定义的数据库,在数据目录下有对应的子文件夹。详细信息见下文。
服务器进程文件
一个服务器程序对应着一个进程,该文件存储着相关的进程ID
服务器日志文件
包括查询日志、错误日志、二进制日志、redo日志等
SSL和RSA证书与密钥文件
用户数据库
- 当用户创建了一个数据库,系统就会在数据目录下创建一个同名的文件夹,并且在这个文件夹中生成一个名为dp.opt的文件,该文件存储了数据库的相关信息,包括字符集、比较规则等。
在MySQL8.0中未见到
- 每个数据库对应的子文件夹下有两类文件,一类是描述表结构的文件,一类是数据文件
InnoDB
在该引擎中,索引和用户记录都是当作数据来处理。数据存放在数据页中,采用表空间来管理数据页。表空间又包括多种类型,比如系统表空间和独立表空间
系统表空间
InnoDB会在文件目录下创建一个名为ibdata1,大小为12MB的文件(当容量不够时会自扩展)
MySQL8.0版本在数据目录根目录下存在一个ibdata1
独立表空间
在MySQL5.6.6及以后的版本中,默认把数据存放到独立表空间中。每当建立一个新的表,就会创建一个新的独立表空间,其文件名是表名.ibd,存放在该表所属的数据库的子文件夹下,同时还会创建一个表名.frm文件,来记录表格的相关信息。
此处存疑:在MySQL8.0的数据库子目录下,我只看到了表名.idb,没有看到表名.frm
MyISAM
在该引擎中,索引和用户记录是分开存放的。其对应的子文件夹下有三类文件,分别是记录表结构的表名.ibd、记录用户记录的表名.MYD以及记录索引的表名.MY1.