连接器工作流程
连接器的作用
连接器是 MySQL 与客户端通信的第一个组件,负责建立连接、校验身份、管理权限。每次客户端发起连接请求,都要经过连接器的完整流程。
完整流程
flowchart TD
A[客户端发起TCP连接] --> B{用户名密码校验}
B -->|成功| C[查询权限表]
B -->|失败| D[Access denied<br/>返回错误]
C --> E[缓存权限到session]
E --> F[等待SQL命令]
F --> G{是否有后续命令}
G -->|有| H[执行SQL]
H --> G
G -->|无| I[断开连接]
关键步骤详解
1. TCP 三次握手
-- 客户端发起连接
mysql -h 127.0.0.1 -P 3306 -u root -p
- 底层走 TCP 协议,MySQL 默认端口 3306
- 连接器在该阶段建立网络通道
2. 身份验证
连接器读取 mysql.user 表进行校验:
-- 查看用户信息
SELECT user, host, authentication_string FROM mysql.user;
校验成功后赋予该用户对应的全局权限。
3. 权限缓存(关键!)
sequenceDiagram
participant C as 客户端
participant Conn as 连接器
participant Auth as 权限表
C->>Conn: 登录请求(user/pass)
Conn->>Auth: 查询mysql.user
Auth-->>Conn: 返回权限数据
Conn->>Conn: 缓存到当前连接session
C->>Conn: 执行查询
Conn->>Conn: 从缓存读取权限<br/>无需再次查表
连接建立后,连接器将用户权限缓存在该连接的内存中。后续所有操作都基于这个缓存来判断,不会重新读取权限表。
连接的生命周期
-- 查看当前所有连接
SHOW PROCESSLIST;
-- 输出示例
+-----+------+-----------+------+---------+------+----------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+-----+------+-----------+------+---------+------+----------+------------------+
| 4 | root | localhost | test | Sleep | 100 | | NULL |
| 5 | root | localhost | test | Query | 0 | starting | SELECT * FROM t |
+-----+------+-----------+------+---------+------+----------+------------------+
- Sleep:空闲连接,等待新的查询
- Query:正在执行查询
- 连接超时时间由
wait_timeout控制(默认 8 小时)
面试要点
- 权限缓存:连接建立后权限就锁死了,修改权限不影响已存在的连接(重要面试题!)
- 长连接问题:过多长连接会导致内存溢出(后续文章详解)
- TCP 端口:3306 是默认端口,需注意防火墙配置
- show processlist:排查连接问题的核心命令
一句话总结:连接器建立了 MySQL 的”会话上下文”,后续所有操作都在这个上下文中进行。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END


暂无评论内容