当使用MySQL客户端(例如mysql
)时,我如何确定它是使用Unix套接字文件还是使用TCP/IP连接到服务器?
答案1
寻找交通工具
尝试使用netstat -ln | grep 'mysql'
,您可以看到它是如何通过输出连接的。如果您有权访问 shell
在 Unix 上,MySQL 程序特别对待主机名 localhost,与其他基于网络的程序相比,其方式可能与您期望的不同。对于到本地主机的连接,MySQL 程序尝试使用 Unix 套接字文件连接到本地服务器。
即使给出了--port
或-P
选项来指定端口号,也会发生这种情况。
如果您想了解连接类型之内在 mysql CLI 中,使用“\s”(状态)命令。
mysql> \s
输出将包含类似于以下内容之一的行(在 Unix 上)。
Connection: 127.0.0.1 via TCP/IP
或者
Connection: Localhost via UNIX socket
强制特定的传输
要确保客户端与本地服务器建立 TCP/IP 连接,请使用--host
或-h
指定主机名值 127.0.0.1,或者本地服务器的 IP 地址或名称。您还可以使用 选项显式指定连接协议,甚至对于 localhost 也是如此--protocol=TCP
。例如:
shell> mysql --host=127.0.0.1
shell> mysql --protocol=TCP
该--protocol={TCP|SOCKET|PIPE|MEMORY}
选项显式指定用于连接到服务器的协议。当其他连接参数通常会导致使用与您想要的协议不同的协议时,它很有用。例如,默认情况下,Unix 上到 localhost 的连接是使用 Unix 套接字文件建立的:
shell> mysql --host=localhost
要强制使用 TCP/IP 连接,请指定一个--protocol
选项:
shell> mysql --host=localhost --protocol=TCP
协议类型:
- TCP:与本地或远程服务器的 TCP/IP 连接。适用于所有平台。
- SOCKET:与本地服务器的 Unix 套接字文件连接。仅适用于 UNIX。
- PIPE:与本地或远程服务器的命名管道连接。仅适用于 Windows。
- MEMORY:与本地服务器的共享内存连接。仅适用于 Windows。
Unix 套接字文件连接比 TCP/IP 更快,但只能在连接到同一台计算机上的服务器时使用。