无法连接到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 

我发现,虽然build立服务器,虽然我可以ping本地主机成功,在某些像Postfix和Apache和Dovecot服务的configuration文件,我需要指定127.0.0.1而不是localhost ,以使他们的工作。

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

我已经对hosts文件进行了各种修改,但是迄今为止我都没有尝试过。

服务器运行Ubuntu 12.04.02 LTS。 它没有安装selinux,甚至在设置IPtables默认策略接受并刷新它们之后,上述情况仍然存在。

你可能会检查的一件事是(这需要你login到MySQL控制台) – 检查以确保你有权限通过localhostlogin到root

mysql -h 127.0.0.1 -u root -p

– 成功login后 –

 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) 

只是扔在那里,以防万一这是什么问题。

大多数MySQL客户端是奇怪的,如果你指定主机为localhost ,它们将其别名为套接字连接而不是TCP连接。 你的select是坚持使用127.0.0.1或者,如果客户端支持它(比如mysql的二进制文件使用--protocol标志),强制它使用TCP而不是unix套接字。

有一件事要注意,如果授予是正确的,如果你使用MariaDB有一个错误,导致在10.0.1和5.5.30版本中的确切行为https://mariadb.atlassian.net/browse/MDEV-4356

你可以检查像这样的权限:

[learner @ localhost〜] $ sudo netstat -npa | grep mysqld

tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 6284 / mysqld
unix 2 [ACC] STREAM LISTENING 233040 6284 / mysqld /var/lib/mysql/mysql.sock

如果这是在0 0.0.0.0:*上进行监听,则意味着每个人都可以访问该mysql。

你可以在my.conf文件中编辑这个绑定。 在linux下默认path是这样的:

[learner @ localhost〜] $ sudo vi /etc/my.cnf

在my.conf文件中添加这些行以允许你想要的ip。

bind-address = 127.0.0.1

bind-address = 0.0.0.0

PHP仍然试图使用默认的套接字位置。 如果将MariaDB / MySQL文件夹从/ var / lib / mysql移动到另一个位置,则可能会出现此问题。 为了解决这个问题,你必须在/etc/php.ini文件中定义新的套接字位置。

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

我通过创build符号链接来解决这个问题, sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock 。 但首先我必须创build文件夹/var/run/mysqld/因为该文件夹最初不存在。

你需要一个mysql.sock在/ tmp中

ln -s /var/lib/mysql/mysql.sock mysql.sock

应该在那之后正常工作。