MySQL客户端建立连接的两种类型
通常,默认情况下,客户端连接MySQL服务器有两种类型:
使用 Unix 套接字文件通过文件系统中的文件进行连接(默认/tmp/mysql.sock
),
或者使用通过端口号连接的 TCP/IP(此类通常涉及远程网络交互)。
Unix 套接字文件连接比 TCP/IP 更快,但只能在连接到同一台计算机上的服务器时使用。
其中,
- 当客户端连接MySQL服务器,如果没有指定-h或者指定-h为localhost,则会连接到本地的主机(即此时客户端位于服务器上)。
在Unix 上,MySQL 程序对主机名进行localhost
特殊处理,客户端使用 Unix 套接字文件进行连接。选项--socket
或MYSQL_UNIX_PORT
环境变量可用于指定套接字名称。 - 否则,连接使用TCP/IP。
--protocol
选项使您能够使用特定的传输协议,即使其他选项通常会导致使用不同的协议。也就是说, --protocol
明确指定传输协议并覆盖前面的规则,即使对于 localhost
.
要确保客户端与本地服务器建立 TCP/IP 连接,请使用--host
或 -h
指定主机名为 127.0.0.1
(而不是 localhost
),或者本地服务器的 IP 地址或名称。您还可以通过使用--protocol=TCP
选项明确指定传输协议,即使对于localhost,也是如此。
接下来实际测试一下。
开启两个CRT的会话,分别为S1,S2。
以下按照顺序执行。
测试1,--no-defaults避免my.cnf中已有的[client]参数的影响。
其中,netstat前后均无任何输出,表示mysql连接没有产生tcp协议。
S1:[root@mysql ~]# netstat -anputwo | grep mysqld | grep ESTABLISHED S2:[root@mysql ~]# mysql --no-defaults -uroot -proot -S /data/mysql3306/mysql3306.sock ...省略部分内容... (root@localhost 11:54:54) [(none)]> S1:[root@mysql ~]# netstat -anputwo | grep mysqld | grep ESTABLISHED
测试2:产生了tcp连接的协议。
S1:[root@mysql ~]# netstat -anputwo | grep mysqld | grep ESTABLISHED S2:[root@mysql ~]# mysql --no-defaults -uroot -proot -h127.0.0.1 ...省略部分内容... ([email protected] 12:01:22) [(none)]> S1:[root@mysql ~]# netstat -anputwo | grep mysqld | grep ESTABLISHED tcp6 0 0 127.0.0.1:3306 127.0.0.1:61023 ESTABLISHED 1659/mysqld keepalive (7212.78/0/0)
测试3:在确认MySQL正常开启提供服务的前提下:如下,其中报错找不到socket文件,表示-hlocalhost默认是会找socket文件来连接数据库的,只是找不到而已。
默认的socket文件被我另外定义在别处了。
[root@mysql ~]# mysql --no-defaults -uroot -proot -hlocalhost mysql: [Warning] Using a password on the command line interface can be insecure. ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
测试4:
S1:[root@mysql ~]# netstat -anputwo | grep mysqld | grep ESTABLISHED S2:[root@mysql ~]# mysql --no-defaults -uroot -proot -hlocalhost --protocol=tcp ...省略部分内容... ([email protected] 12:10:21) [(none)]> S3:[root@mysql ~]# netstat -anputwo | grep mysqld | grep ESTABLISHED tcp6 0 0 127.0.0.1:3306 127.0.0.1:61029 ESTABLISHED 1659/mysqld keepalive (7173.83/0/0)
参考官网:
https://dev.mysql.com/doc/refman/8.0/en/connecting.html
https://dev.mysql.com/doc/refman/8.0/en/can-not-connect-to-server.html
标签:grep,--,MySQL,mysql,root,连接,客户端 From: https://www.cnblogs.com/PiscesCanon/p/17286909.html