I've compiled PHP 5.4.5 from source, and I've installed nginx 1.2.1 and mysql 5.1.63-0ubuntu0.11.04.1 from apt-get on my Ubuntu 11.04 LTS server.

I installed nginx using this:

add-apt-repository ppa:nginx/stable
echo "deb http://ppa.launchpad.net/nginx/stable/ubuntu lucid main" > /etc/apt/sources.list.d/nginx-stable-lucid.list
apt-key adv --keyserver keyserver.ubuntu.com --recv-keys C300EE8C
apt-get update
apt-get install nginx

I've compiled PHP 5.4.5 with the following configure settings:

./configure --enable-fpm --with-mcrypt --with-zlib --enable-mbstring --with-openssl --with-gd --with-jpeg-dir=/usr/lib --with-png-dir=/usr/lib --enable-gd-native-ttf --with-curl --enable-ftp --with-mysql=mysqlnd --with-mysqli=mysqlnd --with-pdo-mysql=mysqlnd --enable-zip

I've installed mysql using this:

apt-get install mysql-server mysql-common mysql-client

The mysql my.cnf file is stock, the sock files is still located within /var/run/mysqld/mysqld.sock. Nginx and PHP use the socket in /var/run/php/php.sock.

Currently, I can't seem to get PHP to Connect to the MySQL server at all, it always says that I have this error Connect Error (2002) No such file or directory.

This is my php.ini file:

date.default_latitude = "40.725314"
date.default_longitude = "-73.498986"
date.timezone = "America/New_York"

mysql.allow_local_infile = "On"
mysql.allow_persistent = "On"
mysql.connect_timeout = 60
mysql.default_host = "localhost"
mysql.default_password = "password"
mysql.default_port = "3306"
mysql.default_socket = "unix:/var/run/mysqld/mysqld.sock"
mysql.default_user  = "username"
mysql.max_links = "16"
mysql.max_persistent = "8"
mysql.trace_mode = "Off"

pdo_mysql.default_socket = "unix:/var/run/mysqld/mysqld.sock"

This is my my.cnf file:

# The MySQL database server configuration file.
# You can copy this to one of:
# - "/etc/mysql/my.cnf" to set global options,
# - "~/.my.cnf" to set user-specific options.
# One can use all long options that the program supports.
# Run program with --help to get a list of available options and with
# --print-defaults to see which it would actually understand and use.
# For explanations see
# http://dev.mysql.com/doc/mysql/en/server-system-variables.html

# This will be passed to all mysql clients
# It has been reported that passwords should be enclosed with ticks/quotes
# escpecially if they contain "#" chars...
# Remember to edit /etc/mysql/debian.cnf when changing the socket location.
port        = 3306
socket      = /var/run/mysqld/mysqld.sock

# Here is entries for some specific programs
# The following values assume you have at least 32M ram

# This was formally known as [safe_mysqld]. Both versions are currently parsed.
socket      = /var/run/mysqld/mysqld.sock
nice        = 0

# * Basic Settings

#   If you make changes to these settings and your system uses apparmor, you may
#   also need to also adjust /etc/apparmor.d/usr.sbin.mysqld.

user        = mysql
socket      = /var/run/mysqld/mysqld.sock
port        = 3306
basedir     = /usr
datadir     = /var/lib/mysql
tmpdir      = /tmp
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address        =
# * Fine Tuning
key_buffer      = 16M
max_allowed_packet  = 16M
thread_stack        = 192K
thread_cache_size       = 8
# This replaces the startup script and checks MyISAM tables if needed
# the first time they are touched
myisam-recover         = BACKUP
#max_connections        = 100
#table_cache            = 64
#thread_concurrency     = 10
# * Query Cache Configuration
query_cache_limit   = 1M
query_cache_size        = 16M
# * Logging and Replication
# Both location gets rotated by the cronjob.
# Be aware that this log type is a performance killer.
# As of 5.1 you can enable the log at runtime!
#general_log_file        = /var/log/mysql/mysql.log
#general_log             = 1

log_error                = /var/log/mysql/error.log

# Here you can see queries with especially long duration
#log_slow_queries   = /var/log/mysql/mysql-slow.log
#long_query_time = 2
# The following can be used as easy to replay backup logs or for replication.
# note: if you are setting up a replication slave, see README.Debian about
#       other settings you may need to change.
#server-id      = 1
#log_bin            = /var/log/mysql/mysql-bin.log
expire_logs_days    = 10
max_binlog_size         = 100M
#binlog_do_db       = include_database_name
#binlog_ignore_db   = include_database_name
# * InnoDB
# InnoDB is enabled by default with a 10MB datafile in /var/lib/mysql/.
# Read the manual for more InnoDB related options. There are many!
# * Security Features
# Read the manual, too, if you want chroot!
# chroot = /var/lib/mysql/
# For generating SSL certificates I recommend the OpenSSL GUI "tinyca".
# ssl-ca=/etc/mysql/cacert.pem
# ssl-cert=/etc/mysql/server-cert.pem
# ssl-key=/etc/mysql/server-key.pem

max_allowed_packet  = 16M

#no-auto-rehash # faster start of mysql but no tab completition

key_buffer      = 16M

# * IMPORTANT: Additional settings that can override those from this file!
#   The files must end with '.cnf', otherwise they'll be ignored.
!includedir /etc/mysql/conf.d/

I can confirm that the /var/run/mysqld/mysqld.sock file is there, and it has the exact same configuration as the /var/run/php/php.sock file that's in it's sister directory, so I have no idea why one can't connect to the other. Any idea's would be greatly appreciated.

I've tried mysql.default_socket and pdo_mysql.default_socket as unix:/var/run/mysqld/mysqld.sock and /var/run/mysqld/mysqld.sock.

  • 1
    Please could you try example 3 from php.net/manual/en/function.mysql-connect.php to see if php can connect to mysql while you specify parameters inside php code? – user130370 Aug 11 '12 at 20:27
  • Same issue, Warning: mysql_connect(): No such file or directory in mysql.php on line 5 Could not connect: No such file or directory. – Mark Tomlin Aug 12 '12 at 13:09
  • 1
    Can you try to connect with mysql client as nginx user? su - www-data -s /bin/bash and mysql -u root -p -S /var/run/mysqld/mysqld.sock – user130370 Aug 12 '12 at 13:22
  • I ssh'd into root, and used the following command su - www-data -s /bin/bash and mysql -u root -p -S /var/run/mysqld/mysqld.sock, that give me the following output su: invalid option -- 'u'. – Mark Tomlin Aug 12 '12 at 13:41
  • 1
    Ok so we have much more information. (btw i mean 2 different commands). – user130370 Aug 12 '12 at 14:19

As www-data can't connect to mysql with he mysql cli client, i suspect there must be a permission issue.

Could you :

  • Check that root can connect to mysql

    # mysql -u root -p -S /var/run/mysqld/mysql.sock

  • Check where www-data has a permission issue

    # su - www-data -s /bin/bash

    Then :

    $ ls -l /var/run/mysqld/mysql.sock

    $ ls -l /var/run/mysqld

  • mysql -u root -p -S /var/run/mysqld/mysqld.sock Does work, produces something like Welcome to the MySQL monitor, and gives me an active command SQL prompt. su - www-data -s /bin/bash works and brings me to a www-data command prompt. The command ls -l /var/run/mysqld/mysql.sock gives me this output srwxrwxrwx 1 mysql mysql 0 Aug 12 10:37 /var/run/mysqld/mysqld.sock. The command ls -l /var/run/mysqld gives me this output total 0\nsrwxrwxrwx 1 mysql mysql 0 Aug 12 10:37 mysqld.sock. Error remains within the PHP script. – Mark Tomlin Aug 12 '12 at 14:47
  • Running mysql -u root -p -S /var/run/mysqld/mysqld.sock after su - www-data -s /bin/bash results in a connection. So I went back to the PHP example script you mentioned in the PHP manual, (Example 3). After editing it so that example one does not kill the script after the first failed attempt in the first example and entering my correct credentials in example two, it does work! Thank you! – Mark Tomlin Aug 12 '12 at 14:59
  • Also changin the first example to include .sock at the end also fixed that. So I guess, I'll raise a bug report with the documentation team on PHP. Thank you again for your help! – Mark Tomlin Aug 12 '12 at 15:01

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.