文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

MYSQL 连接登录过程分析

2024-04-02 19:55

关注

 

MYSQL 连接登录过程分析

在较新MYSQL版本中,默认没有开启线程池的功能,每个客户连接在服务器进程中都拥有自己的线程。

MYSQL 连接登录过程分析

当客户端(应用)连接到MySQL服务器时,服务器要对其进行认证(Authenticate),认证方式基于用户名、原始主机信息和口令。

登录 mysql 可以通过 Unix socket 与 TCP 两种方式登陆,

Unix socket 是实现进程间通信的一种方式, mysql 支持利用 Unix socket 来实现客户端 - 服务端的通信,但要求客户端和服务端在同一台机器上。对于 unix socket 而言,同样也是一种套接字,监听线程会同时监听 TCP socket 和 Unix socket ,接受到请求然后处理,后续的处理逻辑都是一致的,只不过底层通信方式不一样罢了。此处具体分析 TCP 的方式。


具体过程,里面会涉及 client 与 server 的交互,并通过 tcpdump 抓包来展现这一过程。

MYSQL 连接握手过程

MYSQL 的远程登录连接是基于 TCP 的 3 次握手机制, TCP 连接建立成功后, mysql 客户端与 mysql 服务端开始进行通讯,进行 mysql 认证过程。

(1)   服务端首先会发一个握手包到客户端,

(2)   然后客户端向服务端发送认证信息 ( 用户名,密码等 ) ,

(3)   服务端收到认证包后,会检查用户名与密码是否合法,并发送包告知客户端认证信息。如果合法,则登陆成功,否则,登陆失败。连接报错。

tcpdump  过程    

xx.xxx.7.102 代表客户端,

xx.xxx.7.104 代表服务器端,

3306 是服务器的监听端口号。

(1). 在客户端上打开 tcpdump 命令,监听与 xx.xxx.7.104   3306 端口的通信网络包,命令如下:


tcpdump -S -nn -tttt -i bond0 host xx.xxx.7.104 and port 3306 and tcp -c 100

-nn 不进行端口名称的转换。

-tttt 在每一行中输出由date处理的默认格式的时间戳。

-i bond0 指定监听的网络接口

 host xx.xxx.7.104 and port 3306  监听xx.xxx.7.104 的3306端口的网络包

-c 100 表示监听100包就结束

 


此处使用以下命令生成cap文件使用wireshark软件查看,可以看到更详细的信息,包括数据包内容。

tcpdump     -i   bond0   host xx.xxx.7.104 and port 3306 -w  /tmp/1.cap --生成cap文件

 

(2). 在客户端上,利用 mysql 命令远程连接服务端 xx.xxx.7.104 ,


mysql –hxx.xxx.7.104 –P3306 –uxxx –pxxx

登陆成功后,然后直接执行 exit ,退出

(3) 分析 tcpdump 抓取的网络包,如下:

数据包标记解析

S=SYN   发起连接标志,一般用于建立 TCP 连接

P=PUSH 传送数据标志,一般用于传输数据

F=FIN   关闭连接标志,一般用于关闭 TCP 连接

ack     表示应答包

RST= RESET  异常关闭连接

. 表示没有任何标志

MYSQL 连接登录过程分析

1 部分是 TCP 连接建立的 3 次握手过程 :

102 (客户端)向 104 (服务端)发起连接 ------ 》

104 (服务端)向 102 (客户端)发起连接和应答包 ----- 》

102 (客户端)向 104 (服务端)发起应答 ----- 》

TCP 建立连接。

  MYSQL 连接登录过程分析

2 部分是 MYSQL 认证的过程 :

MYSQL 连接登录过程分析

第 4 、 5 步是服务端向客户端发送服务端的一些信息,从包内容可以看出,包含 version, 字符集等。。

MYSQL 连接登录过程分析

真正的登录请求是从第 6 步开始:

102 (客户端)向 104 (服务端)发起登录认证请求,用户是 root------>

104 (服务端)首先在 tcp 返回应答包 , 表示 tcp 连接存在 ------ 》

接着, 104 (服务端)认证通过,返回 OK------->

登录成功

在第 6 步发送的数据包,包含了用户密码这些信息的报文。

  MYSQL 连接登录过程分析

3 部分是登陆成功后,发送基本元数据信息的过程,

102 (客户端)向 104 (服务端)发起查询请求 -------- 》

104 (服务端)向 102 (客户端)返回信息 -------- 》

102 (客户端)返回应答包 -------- 》

查询完成。

  MYSQL 连接登录过程分析

4 部分是断开连接的过程

  MYSQL 连接登录过程分析

MYSQL 监听及连接线程

MYSQL 监听基于 TCP 协议 ,在服务器的 3306 端口, MySQL 服务反复监听是否有客户端发过来的请求:

MYSQL 连接登录过程分析

当新的连接成功后,连接会话是在数据库中创建一个新的前台线程。

MYSQL 连接登录过程分析

该前台线程在数据库中有自己的 id, 同时对应到 os 层面存在相应的线程号,该线程是在 mysqld 进程下。

  MYSQL 连接登录过程分析

 

 



阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-数据库
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯