为什么即使我指定了主机和端口,MySQL 仍通过套接字连接?

为什么即使我指定了主机和端口,MySQL 仍通过套接字连接?

当尝试连接到在本地主机的 3306 端口上运行的 MySQL 数据库(使用命令行工具mysql)时,出现错误:

错误 2002 (HY000):无法通过套接字“/tmp/mysql.sock”连接到本地 MySQL 服务器 (2)

这是我正在使用的命令:

> mysql -h localhost -P 3306
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

指定用户和密码也不起作用:

> mysql -h localhost -P 3306 -u dbuser -p
Password:
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

当我指定主机和端口时,为什么它会尝试使用 UNIX 套接字文件(就像它在这里所做的那样)?

答案1

您需要使用127.0.0.1而不是localhost

> mysql -h 127.0.0.1 -P 3306
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8347701
Server version: 5.6.35-80.0-log Percona Server (GPL), Release 80.0, 
Revision f113994f31
...

你在!

答案2

MySQL 客户端从提供的主机推断协议。

对于给定的连接,如果未明确指定传输协议,则隐式确定。例如,在 Unix 和类 Unix 系统上,与 localhost 的连接会导致套接字文件连接,否则会导致与 127.0.0.1 的 TCP/IP 连接。

来源:MySQL 文档

为了避免这种情况,您可以指定协议你自己:

> mysql -h localhost -P 3306 --protocol TCP

您应该能够登录:D。

相关内容