Найти в Дзене
NULLEDBOX.ru

MySQL/ISP. Решение проблемы «/var/run/mysqld/mysqld.sock не найден»

Многие как и я сам был удивлен появлением такой ошибки. В моем случае она появилась после перезагрузки сервера и в панели ISP просто перешел в базу данных и выскочило данное окно.

В большинстве случаев можно "выключить и включить"

sudo killall -9 mysqld
sudo /etc/init.d/mysql start

Но вернёмся к разбору самой ошибки! MySQL не может подключиться к Unix-сокету. А такое может произойти по двум причинам:

  • кто-то уже занял сокет;
  • MySQL не может получить доступ к сокету (например, его нет).

Для проверки первого варианта можно попробовать узнать: а не занимает ли кто-то этот файл.

sudo lsof /var/run/mysqld/mysqld.sock

В результате получаем нечто подобное:

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
mysqld 1299 mysql 6u unix 0xf688b840 0t0 7877 /var/run/mysqld/mysqld.sock

где видно, кто занял файл. Или же

...
lsof: status error on /run/mysqld/mysqld.sock: No such file or directory
...

— файл отсутствует.

В первом случае всё ясно — либо так и надо, либо отключаем приложение, занявшее сокет.

Во втором случае стоит создать сокет и/или сделать его доступным mysql, для этого выполняем:

sudo mkdir /var/run/mysqld
sudo mkfifo /var/run/mysqld/mysqld.sock
sudo chown -R mysql /var/run/mysqld

Построчно:

  • создаём папку, в которой должен лежать файл сокета;
  • создаём сам сокет командой mkfifo (хотя сокет — это тоже файл, создавать его можно только специальной программой — mkfifo);
  • устанавливаем владельцем папки /var/run/mysqld пользователя mysql.

После чего MySQL уже должен нормально работать.