25

Does anyone know why my /var/run/mysqld/mysqld.sock socket file would not be on my computer when I install (or reinstall) MySQL 5.1?

Right now, when I try to start up a server with mysqld, I get errors like Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connect, but creating a blank file with that name (as suggested on the ubuntu forums) was unsuccessful.

I had both mysql and postgres serving fine until I upgraded to natty a little while ago; I have spent hours walking through both databases trying to figure out what is going on. I can give up on postgres, but I cannot work without a working copy of mysql.

The weirdest part: I use Kubuntu, and my understanding is that KDE uses mysql to store user permissions, etc. I am not experiencing any weird permissions issues; can I take this to mean that (somehow?) MySQL is actually working?

Maybe these socket files live in a different place in natty? Would it be easier to just reinstall the os fresh? At this point, I am open to any suggestions that will stop wasting my time.

Hendrik Brummermann
  • 336
  • 2
  • 4
  • 11
egbutter
  • 353
  • 1
  • 3
  • 7
  • You need to start mysql server first and then that file `/var/run/mysqld/mysqld.sock` will be created. As what @Paul said, you have to remove any file you put in that location. – Evan Hu Dec 10 '14 at 13:13

7 Answers7

24

When you specify host=localhost, mysql client will try to login to mysql server using unix named pipe which requires a .sock file.

This can be bypassed by specifying host=127.0.0.1. This will make mysql client use TCP to connect to the server.

Taken from MySQL's documentation:

mysql --host=127.0.0.1 --port=3306 --user=your_uname --password=your_pass
fuero
  • 9,413
  • 1
  • 35
  • 40
sccott
  • 577
  • 1
  • 4
  • 7
  • This is actually a brilliant (and much needed) answer because, historically speaking, I have seen the `mysql.sock` disappear for no good reason in every version of MySQL I have worked with (back to 4.0). When this happens, I login just like this but I use `--protocol=tcp` instead of `--port`. When you shutdown mysql, the service looks for the socket file. Thus, running `service mysql stop` would fail. To get around the missing socket file headache, I run `mysqladmin -h127.0.0.1 --protocol=tcp -uroot -p shutdown`. Oh, BTW, +1 !!! – RolandoMySQLDBA Feb 13 '13 at 18:54
  • Thank you. This was my first answer anywhere online :) And yes. Alternative method to use TCP is by specifying --protocol=tcp. – sccott Feb 21 '13 at 21:04
22

A socket file doesnt actually contain data, it transports it.. It is a special, unusual type of file created with special system calls/commands. It is not an ordinary file.

It is like a pipe the server and the clients can use to connect and exchange requests and data. Also, it is only used locally. Its significance is merely as an agreed rendezvous location in the filesystem.

Creating a plain old file and putting it in that location may actually interfere with the server creating it... and thereby prevent local clients from connecting to the server.

My recommendation is to remove any file you put in the location. The special socket file is created by the server.

Paul
  • 1,626
  • 15
  • 19
  • 3
    Thanks for the explanation of socket files, and sorry about the poorly-worded question: my original issue was that the socket file was missing - the error mysql kept throwing was `Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) when trying to connect` – egbutter Jun 11 '11 at 04:09
  • but how is it created? because I still dont have it.. :-s any idea? – jpganz18 Jan 31 '13 at 02:41
  • You probably have a mysql client that expects the socket to be in that location, but the server doesn't create it there (or the server isn't running) If the server is running, look in /tmp or use find or locate to find the socket file, then start mysql client with -S – sed_and_done Jan 08 '15 at 15:40
14

A socket is a special pseudo-file used for data transmission by reading and writing, not data storage.

The socket file is created when the service is started and removed when the service is terminated. The location of the file is defined in /etc/my.cnf like so:

[mysqld]
socket=/var/run/mysql/mysql.sock
Michael
  • 1,135
  • 1
  • 10
  • 16
7

In my case, running mysqld_safe created a new mysqld.sock file.

$ cd /etc/init.d/
$ mysqld_safe

You'll probably won't get prompt back, but if you restart your session, a mysqld.sock file will be somewhere. Find it with

$ sudo find / -type s | grep mysqld.sock
aviggiano
  • 171
  • 1
  • 2
  • When I tried running the above command I got the following error messages: find: /.Spotlight-V100: Operation not permitted find: /Library/Application Support/com.apple.TCC: Operation not permitted. – TechnoCat Feb 08 '20 at 07:36
2

I had the same problem with the missing mysqld.sock. I went to the directory that contained mysql, namely /usr/bin in my case. Then I issued the command

mysql mysql --host=localhost --password=whatever --port=3306

The double mysql is not a typo but rather mysql is a database that will always be there in a new MySQL installation. I do not know if --host, --password or --port are needed but since it worked for me using these parameters I am including them. Once MySQL came up I went into the user table as set the password for root. Once MySQL came up the missing socket file was created. I hope this helps someone since I struggled for days.

longneck
  • 22,793
  • 4
  • 50
  • 84
James
  • 21
  • 1
1

If you are using nginx php-fastcgi and you got 502 Bad Gateway error than you have to look at your virtual host configuration on nginx config file. You have to set or correct the fastcgi_pass parameter.The fastcgi_pass is the variable to set the socket connection between nginx and php CGI.

Another point of issue is that the binary starter script could missed the following entries(important) open with: nano /usr/bin/php-fastcgi

SOCKET=/var/run/php-fastcgi/php-fastcgi.socket
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid

The complete content of my starter script /usr/bin/php-fastcgi:

#!/bin/bash

FASTCGI_USER=www-data
FASTCGI_GROUP=www-data
SOCKET=/var/run/php-fastcgi/php-fastcgi.socket
PIDFILE=/var/run/php-fastcgi/php-fastcgi.pid
CHILDREN=6
PHP5=/usr/bin/php5-cgi

/usr/bin/spawn-fcgi -s $SOCKET -P $PIDFILE -C $CHILDREN -u $FASTCGI_USER -g $FASTCGI_GROUP -f $PHP5
masegaloeh
  • 17,978
  • 9
  • 56
  • 104
0

In my case I had to reinstalled mysql with: apt install mysql-server-5.7 (please check before execute the current sql-server-version), to get back mysqld.sock.