Спойлер

среда, 10 июня 2015 г.

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



http://ubuntulinux.ru/config/admin/reshenie-problemy-varrunmysqldmysqld-sock-ne-najden/
mysqlРаботая с реляционной базой данных MySQL, можно столкнуться с проблемой: при старте демона(сервиса) mysqld возвращается сообщение об ошибке:

ERROR 2002 (HY000): Can't connect
to local MySQL server through
socket '/var/run/mysqld/mysqld.sock' (2)
  
Эта же ошибка в логах выглядит так:

[ERROR] Can't start server : Bind on unix socket: No such file or directory
[ERROR] Do you already have another mysqld server running on socket:
 /var/run/mysqld/mysqld.sock ?
 
Иначе говоря, MySQL демон не может подключиться к Unix-сокету. А такое может произойти по двум причинам:
  1. кто-то уже занял сокет;
  2. 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
Построчно:
  1. создаём папку, в которой должен лежать файл сокета;
  2. создаём сам сокет командой mkfifo (хотя сокет -- это тоже файл, создавать его можно только специальной программой -- mkfifo);
  3. устанавливаем владельцем папки /var/run/mysqld пользователя mysql.
После чего MySQL уже должен нормально работать.

Комментариев нет:

Отправить комментарий