连接器工作流程

连接器工作流程

连接器的作用

连接器是 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
喜欢就支持一下吧
点赞14 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容