1_服务器处理客户端请求的过程
MySQL的客户端/服务端架构
-
启动MySQL服务器程序;
-
启动MySQL客户端程序,连接MySQL服务器程序;
-
MySQL客户端程序请求MySQL服务器程序;
-
MySQL服务器程序响应MySQL客户端程序;
启动的MySQL服务器进程的默认名称为mysqld, 启动的MySQL客户端进程的默认名称为mysql。
MySQL在macOS的安装目录:/usr/local/mysql/
其中/usr/local/mysql/bin,存放可执行文件;
启动MySQL服务器程序
- mysqld,代表MySQL服务器程序,一般不直接启用;
- mysqld_safe
- 启动脚本,间接调用mysqld;
- 启动监控进程,帮助服务器程序在宕机时重启;
- 出错信息和其他诊断信息重定向到出错日志文件;
- mysql.server
- 启动脚本,间接调用mysql.server;
- mysql.server start启动服务器程序;
- mysql.server stop关闭服务器程序;
启动MySQL客户端程序
启动MySQL客户端程序 + 连接MySQL服务器程序;
sudo mysql -h127.0.0.1 -uroot -proot
客户端与服务器连接的过程
本质上是一个进程间通信的过程,支持3种通信方式。
- TCP/IP;
- 命名管道或者共享内存,在同一台Windows主机上;
- Unix域套接字文件,在同一台类Unix的机器上;
服务器处理客户端请求
- 连接管理
- 每当有一个客户端进程连接到服务器进程时,服务器进程都会创建一个线程来专门处理与这个客户端的交互;
- 当该客户端退出时会与服务器断开连接,服务器并不会立即把与该客户端交互的线程销毁掉,而是把它缓存起来;
- 在另一个新的客户端再进行连接时,把这个缓存的线程分配给该新客户端;
- 不频繁创建和销毁线程,节省开销。
- 解析与优化
- 查询缓存
- 执行过程
- 执行查询,获取结果;
- 缓存查询对应的结果;
- 下次有相同请求,返回缓存中对应的结果;
- 请求不会被缓存
- 包含某些系统函数、用户自定义变量和函数、一些系统表;
- 缓存未命中
- 在任何字符上的不同,例如空格、注释、大小写;
- 缓存失效
- 表的结构或者数据被修改,执行了TRUNCATE TABLE、ALTER TABLE、DROP TABLE、DROP DATABASE、INSERT、 UPDATE、DELETE语句,该表涉及的所有缓存都将变为无效并从中删除;
- 从MySQL 5.7.20开始,不推荐使用查询缓存,并在MySQL 8.0中删除。
- 执行过程
- 语法解析
- 若未命中缓存,则开始执行查询;
- 类似编译过程,涉及词法解析、语法分析、语义分析;
- 解析执行需要的信息,例如查询的列、表、搜索条件;
- 查询优化
- 优化SQL语句的执行效率;
- 结果生成一个执行计划,使用EXPLAIN语句查看;
- 查询缓存
- 存储引擎
- 连接管理、查询缓存、语法解析、查询优化划分为MySQL Server,涉及逻辑概念;
- 数据的存储和读取操作划分为存储引擎,涉及物理存储器;
最常用的存储引擎是InnoDB和MyISAM。
Feature | MyISAM | InnoDB | NDB |
---|---|---|---|
B-tree indexes | yes | yes | no |
Backup/point-in-time recovery | yes | yes | yes |
Cluster database support | no | no | yes |
Clustered indexes | no | yes | no |
Compressed data | yes | yes | no |
Data caches | no | yes | yes |
Encrypted data | yes | yes | yes |
Foreign key support | no | yes | yes |
Full-text search indexes | yes | yes | no |
Geospatial data type support | yes | yes | yes |
Geospatial indexing support | yes | yes | no |
Hash indexes | no | no | yes |
Index caches | yes | yes | yes |
Locking granularity | Table | Row | Row |
MVCC | no | yes | no |
Query cache support | yes | yes | yes |
Replication support | yes | yes | yes |
Storage limits | 256TB | 64TB | 384EB |
T-tree indexes | no | no | yes |
Transactions | no | yes | yes |
Update statistics for data dictionary | yes | yes | yes |