mysql_connect(): No such file or directory

66,250

Solution 1

Yes you can not connect like that!

@PLB and @jammypeach mysqli is after v4.1, he is using v3 :) Guys read the specs, if you want really to help!

You can't connect, because your socket file is a bit wrong. I remember now that the old RH had this issue before. Your socket is probably as /var/mysql/mysql.sock or /tmp/mysql.sock but one or more apps are looking for the other.

If yours is /tmp/mysql.sock but no /var/mysql/mysql.sock you should:

cd /var 
mkdir mysql
cd mysql
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'll need permissions to make the changes. Just sudo, if needed before the commands above!

ANOTHER SOLUTION (easier):

Create file and call phpinfo(); Look for 'mysql.default_socket'; or 'pdo_mysql.default_socket'; Open My.ini or My.cnf find the socket value e.g. socket=/tmp/mysql.sock Open your php.ini file (which is also found on your phpinfo() page as ‘Loaded Configuration File‘) and change all the occurrences of the incorrect socket location to the correct socket location from MySQL.

ANOTHER SOLUTION (easiest): DSN for PDO:

mysql:unix_socket=/tmp/mysql.sock;dbname=...

mysql_connect:

$db = mysql_connect('localhost:/tmp/mysql.sock', ...

Your system is really scary when it comes to security, if you're hosting sensitive data, I'd upgrade to the latest versions.

---- UPDATE ----

Aaahhhh PHP 5.0 and MySQL 3.23 :)

PHP 5 has a mysql client packaged that cannot connect to a MySQL database less than version 4.1. Starting with version 4.1, MySQL uses a new way of password hashing that is not compatible with pre-4.1 databases. The server your configuration is connecting to is version 3.23. So you need to get yourself a higher version of MySQL. Sorry, but there is no other practical solution for your case. If I was you, I'd upgrade the whole system and install the most recent OS version, if I had to I'd go with Debian and the most recent stable versions of PHP and MySQL.

Solution 2

Fortunatly this is worked well for me:

$db = mysql_connect('localhost:/var/lib/mysql/mysql.sock', 'Username', 'Password');

Solution 3

On a MAC OSX just restart the mysql server

sudo /usr/local/mysql/support-files/mysql.server restart

It worked for me

Solution 4

I had a similar issue that took me several hours to solve. I placed Mysql / Mariadb on a separate drive and the PHP driven website was looking for the socket in the default location. So, I created a symbolic link but I think SELinux would not give the permission. So, then I added these lines to the /etc/php.ini file and it works.

pdo_mysql.default_socket = /data/mysql/mysql.sock
mysql.default_socket = /data/mysql/mysql.sock
mysqli.default_socket = /data/mysql/mysql.sock
Share:
66,250
Maxbester
Author by

Maxbester

Senior software engineer working in Aeronautic industry as a project manager but I like to explore technical solutions.

Updated on December 01, 2020

Comments

  • Maxbester
    Maxbester over 3 years

    I have just installed a MySQL server (version 3.23.58) on an old RedHat7. I cannot install a more recent MySQL version because of the dependencies. I cannot update librairies on this RedHat server.

    However, I have a problem connecting to the database with PHP. First I used PDO but I realized that PDO was not compatible with MySQL 3.23...

    So I used mysql_connect(). Now I have the following error:

    Warning: mysql_connect(): No such file or directory in /user/local/apache/htdocs/php/database.php on line 9
    Error: No such file or directory
    

    My code is:

    $host = 'localhost';
    $user = 'root';
    $password = '';
    $database = 'test';
    $db = mysql_connect($host, $user, $password) or die('Error : ' . mysql_error());
    mysql_select_db($database);
    

    I checked twice that the database exists and the login and password are correct.

    This is strange because the code works fine on my Windows PC with Wampp. I cannot figure out where the problem comes from.

    Any idea?

  • totallyNotLizards
    totallyNotLizards over 11 years
    Well spotted with the specs - in my defence though, I posted those suggestions as a comment because I wasn't sure enough to post an answer. If I'd had the time to read the specs for that version of MySQL I'd probably have posted an answer too ;)
  • GTodorov
    GTodorov over 11 years
    Try the update! My bad. @jammypeach Take my apology, didn't want to insult you!
  • Maxbester
    Maxbester over 11 years
    @GTodorov There is no socket in /tmp and the directory /var/mysql doesn't exist. Is it wrong? In the phpinfo page, mysql.default_socket has no value. By the way, don't worry for the security issues. This computer is not connected to a public network and there is absolutely no important data in it. I am aware of the lack of security ;)
  • GTodorov
    GTodorov over 11 years
    Aaahhhh PHP 5.0 :) PHP 5 has a mysql client packaged that cannot connect to a MySQL database less than version 4.1. Starting with version 4.1, MySQL uses a new way of password hashing that is not compatible with pre-4.1 databases. The server your configuration is connecting to is version 3.23. So, you need to get yourself a higher version of MySQL.
  • Maxbester
    Maxbester over 11 years
    @GTodorov alright! Unfortunately I cannot update the OS version. But I can change the PHP version! I know this is not recommended. Do you know which PHP version would be compatible with MySQL 3.23? Thanks!
  • GTodorov
    GTodorov over 11 years
    Anything earlier than PHP 4.2
  • Maxbester
    Maxbester over 11 years
    Thanks! I hope the documentation is still available!
  • GTodorov
    GTodorov over 11 years
    I am not sure if you'll be able to find any docs for installing php4 it should be pretty much the same as php5. Take a look here: us2.php.net/…
  • Stephan Samuel
    Stephan Samuel about 6 years
    This information was the key to my success using MariaDB. phpMyAdmin connected but mysqli_connect() wouldn't. I got the expected location of the socket file using phpinfo() above and created a symlink (ln -s ...) to match the socket variable as reported by phpMyAdmin. Thanks, @GTodorov!