无法使用“localhost”连接到 MySQL,但使用“127.0.0.1”可以吗?

无法使用“localhost”连接到 MySQL,但使用“127.0.0.1”可以吗?

我的 /etc/hosts 文件如下所示:

127.0.0.1 localhost

# The following lines are desirable for IPv6 capable hosts
::1     ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters

我在构建服务器时发现,虽然我可以成功 ping 通 localhost,但是在 Postfix、Apache 和 Dovecot 等服务的某些配置文件中,我需要指定127.0.0.1而不是localhost才能使它们正常工作。

我还需要更改某些数据库驱动网站的配置文件,这些网站用于localhost连接 MySQL。

我尝试对该hosts文件进行各种修改,但到目前为止都没有任何帮助。

该服务器运行的是 Ubuntu 12.04.02 LTS。它没有安装 selinux,即使在将 IPtables 默认策略设置为接受并刷新它们后,上述情况仍然存在。

答案1

您可能需要检查的一件事是(这需要您登录到 MySQL 控制台) - 检查以确保您有权通过root登录localhost

mysql -h 127.0.0.1 -u root -p

-- 成功登录后 --

mysql> select user,host from mysql.user;
+------+--------------------------------+
| user | host                           |
+------+--------------------------------+
| root | 127.0.0.1                      | 
| root | ::1                            |
| root | localhost                      | <-- Make sure you have a localhost entry for root
+------+--------------------------------+
3 rows in set (0.00 sec)

只是把它扔到那里,以防万一这是问题所在。

答案2

大多数 MySQL 客户端都很奇怪,如果你将主机指定为localhost,它们会将其别名为套接字连接而不是 TCP 连接。你的选择是要么坚持使用127.0.0.1,要么如果客户端支持它(就像 mysql CLI 二进制文件使用标志一样--protocol),强制它使用 TCP 而不是 unix 套接字。

答案3

需要注意的是,如果你使用的是 MariaDB,则授权是否正确存在一个错误,该错误会导致版本 10.0.1 和 5.5.30 中出现这种行为 https://mariadb.atlassian.net/browse/MDEV-4356

答案4

PHP 仍在尝试使用默认套接字位置。如果您将 MariaDB/MySQL 文件夹从/var/lib/mysql到另一个位置。为了解决这个问题,你必须在/etc/php.ini文件。

mysqli.default_socket =/newDBLocation/mysql/mysql.sock

相关内容