Mysql深入学习系列第三篇-mysql的通信协议

1,930 阅读2分钟

Mysql的通信协议

mysql的连接

连接mysql操作是一个连接进程和mysql数据库实例进行通信。本质上来说是进程间通信。常用的进程通信方式有管道、命名管道、命名字、TCP/IP套接字、UNIX域套接字。mysql数据库提供的连接方式从本质上看都是上述提及的进程通信方式。

TCP/IP

TCP/IP方式是mysql数据库在任何平台下都提供的连接方式,也是我们在日常开发中最常用的一种方式。

协议分析

Mysql协议被用在Mysql Clients和Mysql Server通讯的时候,具体有以下几个场景:客户端和服务器进行连接,Mysql代理以及主从备份;

客户端和服务器端通讯的整个流程大致如下:

1.建立tcp连接三次握手;
2.与mysql服务器建立连接,即Connection Phase(连接阶段或者是认证阶段);
s->c:发送握手初始化包(a Initial Handshake Packet)
c->s:发送验证包(authentication response)
s->c:服务器发送认证结果包
3.认证通过之后,服务端接受客户端命令包,发送相应的相应包,即Command Phase(命令阶段);
4.断开连接请求exit命令;
5.四次挥手tcp断开连接;

更加具体的报文信息

Share Memory和Named Pipes

这两个协议都是只能在windows环境下使用,并且要求客户端和mysql实例在同一个电脑上。开启方式如下(在配置文件中添加):
Named Pipes开启:–shared-memory=on/off;
Share Memory开启:–enable-named-pipe=on/off;

UNIX域套接字

在Linux和UNIX环境下可以使用(这是最高效的连接方式)。这种方式其实不是一个网络协议,所以只能在客户端和实例在同一台服务器上的情况下才能使用。连接步骤如下:

  1. 找到UNIX域套接字文件的路径(也可以在配置文件中指定套接字文件的路径-例如 --socket==/tem/mysql.sock)查找命令为:show variables like 'socket';
  2. 连接命令: mysql -udavid -S /var/lib/mysql/mysql.sock

参考文献