MySQL localhost / 127.0.0.1 problem
I have a local web server running on my macbook and I've come across a strange problem. I can access MySQL just fine using a program like Sequel Pro, password works and 开发者_如何学Clife is great.
Within PHP, if I have the db server as 127.0.0.1, everything works as well.
However, if I change the db server to localhost, I get access denied for 'root'@'localhost' errors. I've made sure the MySQL socket is setup correctly, but still cannot use localhost.
Any insight would be awesome. Thanks!
Besides Michael's words,
there's another link: http://dev.mysql.com/doc/refman/5.1/en/connecting.html, it says:
On Unix, MySQL programs treat the host name localhost specially, in a way that is likely different from what you expect compared to other network-based programs. For connections to localhost, MySQL programs attempt to connect to the local server by using a Unix socket file. This occurs even if a --port or -P option is given to specify a port number.
it's not a typical tcp/ip connection. if u have local port forwarding from 127.0.0.1:3306 to 192.168.1.2:3306, "mysql -h localhost" will try to connect to local unix socket file.
it's not specific to your question(since u're running php), but hope it helps anyway.
From here.
Set the initial password for the root user on localhost.
SET PASSWORD FOR root@localhost=PASSWORD('new_password'); FLUSH PRIVILEGES;
In your my.cnf file, either change your bind-address to localhost or remove the bind-address setting entirely (which will make mysql listen on all IP's).
The my.cnf file is usually in /etc or /etc/mysql.
This is what fixed it for me. PHP.INI defaults to a different location than MySQL for the default socket. To fix, just run these two commands to add an alias (no restart needed):
mkdir /var/mysql
ln -s /tmp/mysql.sock /var/mysql/mysql.sock
Source
精彩评论