如何确定 MySQL 客户端使用的连接方法?

Eug*_*ash 11 ipc mysql

当使用 MySQL 客户端(例如mysql)时,我如何确定它是使用 Unix 套接字文件还是使用 TCP/IP 连接到服务器?

har*_*kat 13

寻找交通工具

尝试使用netstat -ln | grep 'mysql',您可以看到它是如何通过输出连接的。如果您可以访问 shell

在 Unix 上,MySQL 程序特别对待主机名 localhost,与其他基于网络的程序相比,它的方式可能与您期望的不同。对于到 localhost 的连接,MySQL 程序尝试使用 Unix 套接字文件连接到本地服务器。

即使给出了一个--port-P选项来指定端口号,也会发生这种情况。

如果像yould从知道的连接类型的MySQL的CLI中,使用“\ S”(状态)命令。

mysql> \s
Run Code Online (Sandbox Code Playgroud)

输出将有如下一行(在 Unix 上)。

Connection:             127.0.0.1 via TCP/IP
Run Code Online (Sandbox Code Playgroud)

或者

Connection:             Localhost via UNIX socket
Run Code Online (Sandbox Code Playgroud)

强制特定传输

要确保客户端与本地服务器建立 TCP/IP 连接,请使用--host-h指定主机名值 127.0.0.1,或本地服务器的 IP 地址或名称。您还可以使用该--protocol=TCP选项显式指定连接协议,即使对于本地主机也是如此。例如:

shell> mysql --host=127.0.0.1
shell> mysql --protocol=TCP
Run Code Online (Sandbox Code Playgroud)

--protocol={TCP|SOCKET|PIPE|MEMORY}选项明确指定用于连接到服务器的协议。当其他连接参数通常会导致使用您想要的协议之外的协议时,这很有用。例如,默认情况下,Unix 到 localhost 的连接是使用 Unix 套接字文件建立的:

shell> mysql --host=localhost
Run Code Online (Sandbox Code Playgroud)

要强制使用 TCP/IP 连接,请指定一个--protocol选项:

shell> mysql --host=localhost --protocol=TCP
Run Code Online (Sandbox Code Playgroud)

协议类型:

  • TCP:到本地或远程服务器的 TCP/IP 连接。适用于所有平台。
  • SOCKET:Unix 套接字文件连接到本地服务器。仅在 unix 上可用。
  • PIPE:到本地或远程服务器的命名管道连接。仅适用于 Windows。
  • MEMORY:到本地服务器的共享内存连接。仅适用于 Windows。

Unix 套接字文件连接比 TCP/IP 快,但只能在连接到同一台计算机上的服务器时使用。