我们知道,MySQL的登陆方式有两种,分别是TCP/IP 和UNIX域 套接字。
![84322bad20f59cfa0dc5995c24507911.png](https://i-blog.csdnimg.cn/blog_migrate/4c02e0123dd36cddb05b990a95e73df8.jpeg)
jdbc
1.TCP/IP 套接字方式
这种方式会在TCP/IP 连接上建立一个基于网络的连接请求,一般是client连接跑在Server上的MySQL实例,2台机器通过一个TCP/IP 网络连接。
比如:
C:甥敳獲zh>mysql -h 192.168.0.10 -uroot -pEnter password: *******Welcome to the MySQL monitor. Commands end with ; or g.Your MySQL connection id is 6Server version: 5.5.20-log MySQL Community Server (GPL)Copyright (c) 2000, 2011, Oracle and/or its affiliates. All rights reserved.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.Type 'help;' or 'h' for help. Type 'c' to clear the current input statement.mysql>
这里的客户端是Windows,向IP为192.168.0.10 的服务器上的MySQL实例发起了TCP/IP请求,连接成功后就可以使用MySQL了。
2.UNIX域套接字
UNIX域套接字并不是网络协议,所以只能在MySQL客户端和数据库实例在一台服务器上使用,用户可以在配置文件中指定套接字文件
--socket=/tmp/mysql.sock
上面两种方式是最常见的,下面我要说的是第三种,命名管道和共享内存的方式。
在Windows 2000、Windows XP、Windows 2003和Windows Vista以及在此之后的Windows操作系统中,如果两个需要通信的进程在同一台服务器上,那么可以使用命名管道。在MySQL数据库中,需在配置文件中启用--enable-named-pipe选项,除此外,MySQL还提供了共享内存的连接方式,在配置文件中添加--shared-memory。如果想使用共享内存的方式,在连接时,Mysql客户端还必须使用-protocol=memory选项。
经过测试可以发现,命名管道的方式,可以让MySQL在Windows下连接性能提高至少20%-30%。
配置如下,修改my.ini文件,添加如下选项
[mysqld]enable-named-pipesocket=MySQL
然后如果你用的是JDBC客户端,只需修改URL如下:
mysql.jdbc.url=jdbc:mysql://localhost:3306/test?socketFactory=com.mysql.jdbc.NamedPipeSocketFactory&useUnicode=true&characterEncoding=UTF-8&autoReconnct=true&autoReconnectForPools=true
新增的配置就是 socketFactory=com.mysql.jdbc.NamedPipeSocketFactory 这一个。需要注意的是命名管道仅能当连接到位于相同Windows物理机器上的MySQL时才能正常工作,该机器上应使用了JDBC驱动程序。在简单的性能测试中,命名管道的访问速度比标准的TCP/IP访问块30~50%。生产环境中,不少小公司或外包公司都使用的Windows服务器,这么做,性能提升还是很明显的。
关于这个参数的官方文档看这里:https://dev.mysql.com/doc/connector-j/5.1/en/connector-j-named-pipe.html。文档中提到,配置不同,速度不同,有可能pipe会比TCP/IP慢,建议测试后使用。