MySQL连接传输协议
MySQL连接协议是MySQL客户端和MySQL服务器之间的一种通讯协议。命令在客户端被写出来,打包后通过网络发送给MySQL服务端,服务端处理后给到响应结果,再经过网络传输到客户端显示结果。MySQL支持多种协议,包括TCP/IP、Unix sock、共享内存等。不同的连接协议之间会存在性能上的差异。
阅读更多:MySQL 教程
常用的连接传输协议
在MySQL中,常见的连接传输协议有TCP/IP协议、Unix socket协议以及共享内存协议。
- TCP/IP协议:通过TCP/IP协议连接是MySQL与客户端之间使用最广泛的一种协议。使用TCP/IP协议连接,MySQL数据库可以跨多台计算机连接。
-
Unix socket协议:基于套接字的连接方式,这种方式在MySQL安装时同时安装MySQL专用Unix socket模块,提供额外的一种本地MySQL容器之间的通信方式,和TCP/IP协议相比,Unix Socket 协议因为不需要经过网络协议的控制,性能相对于TCP/IP更快。
-
共享内存协议:只能用于唯一的目标:在同一台物理机器上的不同程序之间共享相同的内存空间。它通过操作系统共享内存机制来实现进程间的通信,效率非常高效。
在一般情况下,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协议连接。不同的连接传输协议之间,特点和性能都存在较大的差异,因此需要在项目实际需求和环境的情况下进行选择。