MySQL连接传输协议

MySQL连接传输协议

MySQL连接协议是MySQL客户端和MySQL服务器之间的一种通讯协议。命令在客户端被写出来,打包后通过网络发送给MySQL服务端,服务端处理后给到响应结果,再经过网络传输到客户端显示结果。MySQL支持多种协议,包括TCP/IP、Unix sock、共享内存等。不同的连接协议之间会存在性能上的差异。

阅读更多:MySQL 教程

常用的连接传输协议

在MySQL中,常见的连接传输协议有TCP/IP协议、Unix socket协议以及共享内存协议。

  1. TCP/IP协议:通过TCP/IP协议连接是MySQL与客户端之间使用最广泛的一种协议。使用TCP/IP协议连接,MySQL数据库可以跨多台计算机连接。

  2. Unix socket协议:基于套接字的连接方式,这种方式在MySQL安装时同时安装MySQL专用Unix socket模块,提供额外的一种本地MySQL容器之间的通信方式,和TCP/IP协议相比,Unix Socket 协议因为不需要经过网络协议的控制,性能相对于TCP/IP更快。

  3. 共享内存协议:只能用于唯一的目标:在同一台物理机器上的不同程序之间共享相同的内存空间。它通过操作系统共享内存机制来实现进程间的通信,效率非常高效。

在一般情况下,TCP/IP协议可以完全满足要求,但使用Unix socket协议,取决于你的电脑安装的软件是否支持Unix socket协议。共享内存协议则更加局限,只能在同一台物理机器上面进行通信。

MySQL连接传输协议的性能比较

我们通过自己的实例对比不同连接协议的性能表现。

环境:阿里云云服务器2核4G,CentOS 7.6操作系统,MySQL5.6

测试工具:sysbench

选型:

  • TCP/IP协议连接
  • Unix socket协议连接

测试分别100客户端并发进行

TCP/IP协议连接

sysbench命令:sysbench –test=oltp –mysql-host=IP地址 –mysql-port=3306 –mysql-user=’用户名’ –mysql-password=’密码’ –mysql-db=sbtest –range_size=100 –table_size=1000000 –tables=10 –threads=100 –time=60 –report-interval=10 –db-driver=mysql –mysql-table-engine=innodb run jmeter测试

测试结果:Transactions: 2045675 (34086.11 per sec.)
Queries per second: 34086.11
SQL Statistics:
queries performed: 2045675
queries skipped: 0
other operations: 0
responses received: 2045675
data transferred: 8884.55MB
response time:
min: 0.14ms
avg: 2.32ms
max: 172.22ms
95th percentile: 4.96ms
sum: 4748330.73ms

Unix socket协议连接

command:sysbench –test=oltp –mysql-socket=/data/mysql/mysql.sock –mysql-user=’用户名’ –mysql-password=’密码’ –mysql-db=sbtest –range_size=100 –table_size=1000000 –tables=10 –threads=100 –time=60 –report-interval=10 –db-driver=mysql –mysql-table-engine=innodb run jmeter测试

测试结果:Transactions: 4442592 (72177.01 per sec.)
Queries per second: 72177.01
SQL Statistics:
queries performed: 4442592
queries skipped: 0
other operations: 0
responses received: 4442592
data transferred: 19347.48MB
response time:
min: 0.02ms
avg: 1.38ms
max: 81.87ms
95th percentile: 2.52ms
sum: 3212064.54ms

我们可以看到,使用Unix Socket协议连接的情况下性能比使用TCP/IP协议连接快大约2倍。这是因为触发了网络传输、数据包内容的校验、路由转发等网络相关的操作,不仅会消耗计算机的大量CPU和内存资源,还会导致很高的网络延时。

另外,由于TCP/IP协议支持网络环境下多个客户端对MySQL服务器的访问,这使得MySQL服务器需要为所有这些客户端提供服务,从而影响了应用服务器的整体性能。

代码示例

TCP/IP协议连接

mysql -h127.0.0.1 -uroot -p

Unix socket协议连接

mysql -uroot -p --socket=/var/lib/mysql/mysql.sock

结论

在实际开发过程中,如果MySQL客户端和MySQL服务器在同一台机器上,建议使用Unix socket协议连接。如果MySQL服务器部署在云服务器上,建议使用TCP/IP协议连接。不同的连接传输协议之间,特点和性能都存在较大的差异,因此需要在项目实际需求和环境的情况下进行选择。

Camera课程

Python教程

Java教程

Web教程

数据库教程

图形图像教程

办公软件教程

Linux教程

计算机教程

大数据教程

开发工具教程

MySQL 教程