我的/ 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
应该在那之后正常工作。