Warning: mysql_connect(): [2002] No such file or directory (trying to connect via unix:///tmp/mysql.sock) in
I'm trying to connect to my MySQL DB with the Terminal on my Apple (With PHP).
Yesterday it worked fine, and now I suddenly get the error in the title.
The script works when I use my browser to run it (I have XAMPP installed), but Terminal refuses to connect to the DB.
Here is the file that I include to connect (the script works when I don't include this, but then it doesn't connect to the DB):
<?php
mysql_connect("localhost", "root", "") or die(mysql_error());
mysql_select_db("FNB1C_data") or die(mysql_error());
?>
That should work, since it works with my browser.
The command I use at the Terminal is php scriptname.php
.
Solution 1:
For some reason mysql on OS X gets the locations of the required socket file a bit wrong, but thankfully the solution is as simple as setting up a symbolic link.
You may have a socket (appearing as a zero length file) as /tmp/mysql.sock
or /var/mysql/mysql.sock
, but one or more apps is looking in the other location for it. Find out with this command:
ls -l /tmp/mysql.sock /var/mysql/mysql.sock
Rather than move the socket, edit config files, and have to remember to keep edited files local and away from servers where the paths are correct, simply create a symbolic link so your Mac finds the required socket, even when it's looking in the wrong place!
If you have /tmp/mysql.sock
but no /var/mysql/mysql.sock
then...
cd /var
sudo mkdir mysql
sudo chmod 755 mysql
cd mysql
sudo ln -s /tmp/mysql.sock mysql.sock
If you have /var/mysql/mysql.sock
but no /tmp/mysql.sock
then...
cd /tmp
ln -s /var/mysql/mysql.sock mysql.sock
You will need permissions to create the directory and link, so just prefix the commands above with sudo if necessary.
Solution 2:
I also had this error, but could only fix it through the suggestion here.
To summarize, use:
127.0.0.1
Instead of:
localhost
The reason is that "localhost" is a special name for the MySQL driver making it use the UNIX socket to connect to MySQL instead of the a TCP socket.
Solution 3:
I was having the same problem and this is how I fixed it:
I had this and it didn't work:
$con = mysql_connect('localhost', 'root', '1234');
I did this and it worked:
$con = mysql_connect(':/Applications/MAMP/tmp/mysql/mysql.sock', 'root', '1234');
Instead of using the mysql server, I connected directly to the Unix Socket. Worked for me.