error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)' -- Missing /var/run/mysqld/mysqld.sock

Viewed 1852002

My problem started off with me not being able to log in as root any more on my mysql install. I was attempting to run mysql without passwords turned on... but whenever I ran the command

# mysqld_safe --skip-grant-tables &

I would never get the prompt back. I was trying to follow these instructions to recover the password.

The screen just looks like this:

root@jj-SFF-PC:/usr/bin# mysqld_safe --skip-grant-tables
120816 11:40:53 mysqld_safe Logging to syslog.
120816 11:40:53 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql

and I don't get a prompt to start typing the SQL commands to reset the password.

When I kill it by pressing CTRL + C, I get the following message:

error: 'Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)'

Check that mysqld is running and that the socket: '/var/run/mysqld/mysqld.sock' exists!

If I retry the command and leave it long enough, I do get the following series of messages:

root@jj-SFF-PC:/run/mysqld# 120816 13:15:02 mysqld_safe Logging to syslog.
120816 13:15:02 mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql
120816 13:16:42 mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended

[1]+  Done                    mysqld_safe --skip-grant-tables
root@jj-SFF-PC:/run/mysqld#

But then if I try to log in as root by doing:

# mysql -u root

I get the following error message:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

I checked and /var/run/mysqld/mysqld.sock file doesn't not exist. The folder does, but not the file.

Also, I don't know if this helps or not, but I ran find / -name mysqld and it came up with:

/var/run/mysqld - folder
/usr/sbin/mysqld - file
/run/mysqld - folder

I'm new to Linux and MySQL, so I don't know if this is normal or not. But I'm including this info just in case it helps.

I finally decided to uninstall and reinstall mysql.

apt-get remove mysql-server
apt-get remove mysql-client
apt-get remove mysql-common
apt-get remove phpmyadmin

After reinstalling all packages again in the same order as above, during the phpmyadmin install, I got the same error:

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)

So I tried again to uninstall/reinstall. This time, after I uninstalled the packages, I also manually renamed all mysql files and directories to mysql.bad in their respective locations.

/var/lib/mysql 
/var/lib/mysql/mysql
/var/log/mysql
/usr/lib/perl5/DBD/mysql
/usr/lib/perl5/auto/DBD/mysql
/usr/lib/mysql
/usr/bin/mysql
/usr/share/mysql
/usr/share/dbconfig-common/internal/mysql
/etc/init.d/mysql
/etc/apparmor.d/abstractions/mysql
/etc/mysql

Then I tried to reinstall mysql-server and mysql-client again. But I've noticed that it doesn't prompt me for a password. Isn't it supposed to ask for an admin password?

50 Answers

Make sure your inaccessible socket file path is same as '/var/run/mysqld/mysqld.sock', otherwise change the path as yours. Stop the mysqld

$ sudo /etc/init.d/mysqld stop

If the process still runing;

$ sudo pkill -9 mysqld

Remove the mysql directory where socket going to create. For me it did not allowed to remove, so I had to forcefully remove.

$ sudo mkdir -p /var/run/mysqld

Set the ownership to the dirctory

$ sudo chown mysql:mysql /var/run/mysqld

Start mysql

$ sudo /etc/init.d/mysql start

Trying to connect mysql

$ sudo mysql -u dbuser -p

The answer of the user load step worked for me. Sometimes is need edit the file in /etc/mysql/my.cnf add line to client

[client]
password = your_mysql_root_password
port  = 3306
host  = 127.0.0.1
socket  = /var/lib/mysql/mysql.sock

Using XAMPP on ubuntu:

  1. Create a folder called mysqld inside /var/run directory. You can accomplish that using the command sudo mkdir /var/run/mysqld.

  2. Create a symbolic link to mysql.sock file that is created by the XAMPP server when it is started. You can use the command sudo ln -s /opt/lampp/var/mysql/mysql.sock /var/run/mysqld/mysqld.sock.

Note: The mysql.sock file is created when the server is started and removed when the server is stopped, so sometimes the link you created might appear to be broken but it should work as long as you have started the server using either sudo /opt/lampp/lampp start or any other means.

  1. Start the server if it's not already running and try executing your program again.

Good luck! I hope you'll get away with it this time.

I think your MySQL server has not started. So start the server using one of the following commands.

#services mysql start

or

#/etc/init.d/mysql start

Why getting this error

I received new updates of mysql libraries so i updated my Kubuntu OS after that getting these errors.


Commands i tried and how i fixed it.

MySql-server is running correctly but when i tried to connect its giving

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'.

I checked /var/run/mysqld/mysqld.sock'. this directory. My files did not existed.

I also tried these commands to connect but did not worked for me.

 mysql -h 127.0.0.1 -P 3306 -u root -p

 sudo service mysql start

After wasting round about 2 hours i found the solution

sudo apt-get clean
sudo apt-get update
sudo apt-get upgrade -f

After that everything fixed for me.

I am using XAMPP on Ubuntu. I found this error when connecting database through terminal. I solve it without any configuration because default socket file path in XAMPP is written in "/opt/lampp/etc/my.cnf" as following:

[client]
#password   = your_password
port        = 3306
socket      = /opt/lampp/var/mysql/mysql.sock

now you can connect just by giving this socket path parameter with mysql command on terminal like:

mysql -u root --socket /opt/lampp/var/mysql/mysql.sock

and it's done without any configuration.

If you don't want to type socket path everytime, then go for changing default path in my.cnf by "/var/run/mysqld/mysqld.sock". Provide permissions and restart mysql server.

Edit: Recently I've installed Ubuntu 20.04 and trying to install MySQL server but my system were crashing and not working at all. So I've just completely removed MySQL and installed MariaDB. Its working like a charm without any problems.

I had the exactly same issue. After struggling for an hour, I found a way of correcting it without reinstalling mysql-common, mysql-client, mysql-server.

First of all, go to "/var/run/mysqld". You will find that the mysql.sock does not exist. Simply remove the entire mysqld directory and recreate it and provide it necessary privileges.

# rm -rf /var/run/mysqld && mkdir /var/run/mysqld && chown mysql /var/run/mysqld/

Now, Kill the mysql process in it's entirety. It might be possible that it will show you "waiting for page cleaner" on running "/etc/init.d/mysql status" command even after shutting down the service.

To completely close the service, use

# pkill -9 mysqld

Once the process is killed, try starting it again using

# /etc/init.d/mysql start

And you will see that it works good! And also there will be no issue in stopping it too.

My solution;

Ubuntu 18.04 (WSL)

/etc/mysql/my.cnf

!includedir /etc/mysql/conf.d/
!includedir /etc/mysql/mysql.conf.d/

/etc/mysql/mysql.conf.d/mysqld.cnf

[mysqld]
user            = mysql
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
port            = 3306

I changed the port. It's worked for me. You can write another port. Example 3355

First create dir /var/run/mysqld

with command:

mkdir -p /var/run/mysqld

then add rigths to the dir

chown mysql:mysql /var/run/mysqld

after this try

mysql -u root

You must install mysql-server

apt install mysql-server

Try the following at a terminal prompt:

sudo mysql

Once that lets you in, you can create a new user and grant privileges that you want on the specific database they need access to.

Mysql 5.7 changed some things and by default uses the auth_socket plugin (as opposed to mysql_native_password) for root to protect the account from getting hacked. You can override this by setting the plugin field for root, but unless you have a very good reason you probably shouldn't circumvent the protection. Especially when sudo mysql is easier than mysql -u root -p anyway.

I found out this info - of all places - from a Raspberry Pi help site. Worked like a charm after Lubuntu 18.04 annoyed the heck out of me for a couple hours.

Sometimes it's just that you don't have enough space on server, just free up some space (like clearing log files), and start mysql:

/etc/init.d/mysql start

my situation is that the mysql in the /etc/ directory is renamed mysql_bk, just copy mysql_bk

sudo cp -r /etc/mysql_bk/ /etc/mysql/

then

service mysql restart

Just share with you guys, I faced same issue and got resolved using below command

sudo ln -s /var/lib/mysql/mysql.sock /var/run/mysqld/mysqld.sock

I hard link both the locations from my my.cnf and error

I got this answer from enter link description here

For those who are using MySql via Vitess.

I received this error at the vttablet component due to a syntax error (forgot to add ; to end of SQL command) passed to init_db.sql that is given as example in get started docs:

apiVersion: v1
kind: Secret
metadata:
  name: my-cluster-config
type: Opaque
stringData:
  users.json: |
    {
      "user": [{
        "UserData": "user",
        "Password": "pass"
      }]
    }
  init_db.sql: |
    # This file is executed immediately after mysql_install_db,
    # to initialize a fresh data directory.
    CREATE DATABASE IF NOT EXISTS my_db <--- No ';' at the end

Full error log:

TabletManager.ReplicationStatus()(on zone1from ) error: net.Dial(/vt/socket/mysql.sock) to local server failed: dial unix /vt/socket/mysql.sock: connect: no such file or directory (errno 2002)

I had same problem. after removing and reinstalling mysql this issue did happen.

CAUTION: you're DATA will be DELTED!!! unfortunately i didn't find a way to get backup of mysql files when mysql is broken (if you know a way to do this please note in comments).
Just use this method if your data in mysql does not matter to you (like me when i was trying to install mysql in new installed OS).

Problem:

What did cause the problem? first i used apt remove to reinstall the mysql but this job caused error in mysql:

Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2)' -- Missing /var/run/mysqld/mysqld.sock

Fix:

Then i used command purge to reinstall the mysql and it worked:

  1. sudo apt purge mysql* (this will clean all of your data!);
  2. sudo apt autoremove
  3. sudo apt install mysql-server (add what application you need!)

After doing these steps just run sudo mysql -u root.

if you have "Unit mysql.service not found" error, you should install "sudo apt-get install mysql-server"

'/var/run/mysqld/mysqld.sock' (2)' on pop os

If you are on pop-os, do this

Remove and purge any prior installed mysql server. Then install it and configure as below.

sudo apt update
sudo apt install mysql-server
sudo mysql_secure_installation

The only thing that worked for me was uninstalling MYSQL completely from my system. So i did the following:

sudo apt-get remove mysql-server -y
sudo rm -r /var/lib/mysql
sudo rm -r /etc/mysql
sudo apt-get remove mysql-client -y
sudo apt-get remove mysql-common -y
sudo apt-get remove phpmyadmin -y
sudo apt-get install mysql-server -y
Related