3

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 life 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!

0

4 Answers 4

5

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.

Sign up to request clarification or add additional context in comments.

Comments

4

From here.

Set the initial password for the root user on localhost.

SET PASSWORD FOR root@localhost=PASSWORD('new_password'); FLUSH PRIVILEGES;

1 Comment

This was the less voted, but the real answer to his question :)
1

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.

2 Comments

Are there any major security concerns to removing the bind-address setting altogether?
If your machine has multiple IP addresses, then you would be exposing your server to all of those IPs. If you're talking about a single IP machine I wouldn't expect it to be an issue.
0

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

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.