#Что означает ошибка
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock'
Клиент mysql и PHP при хосте localhost подключаются через Unix-сокет (файл вроде /var/run/mysqld/mysqld.sock), а не по сети. Ошибка 2002 говорит, что файла сокета нет или сервер на него не отвечает: служба остановлена, сокет лежит в другом месте, закончилось место на диске или конфигурация клиента и сервера расходится. Проверка идёт сверху вниз: жива ли служба, где сокет, почему служба упала.
#Причины и решения
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Служба MySQL не запущенаСервер остановлен или упал. | systemctl status mysql — inactive/failed. | Запустите службу. |
| Другой путь сокетаКлиент ищет сокет не там. | Сокет в /tmp/mysql.sock или другом пути. | Укажите путь в my.cnf. |
| Нет места на дискеДиск заполнен, сервер не стартует. | df -h — 100%. | Освободите место. |
Ошибка в конфигурацииНеверные параметры my.cnf. | В журнале ошибок причина запуска. | Исправьте и перезапустите. |
#Пошаговое решение
- Проверьте службуПодключитесь к серверу по SSH под учётной записью с правом просмотра служб. Выполните
systemctl status mysql --no-pagerдля MySQL либоsystemctl status mariadb --no-pagerдля MariaDB; имя зависит от установленного пакета. Если статусactive (running), переходите к поиску сокета; еслиfailed/inactive, сохраните последние сообщения и не меняйте файлы данных вручную. - Запустите службуЕсли служба действительно остановлена и разрешён её запуск, выполните
sudo systemctl start mysql(илиmariadb) и сразуsudo journalctl -u mysql -n 50 --no-pager. Успех — статусactiveи отсутствие ошибок запуска. Если служба снова падает, не повторяйте запуск многократно: изучите сообщение об ошибке и резервные копии, особенно при повреждении InnoDB. - Проверьте место и inodeВ том же терминале выполните
df -hдля свободного места иdf -iдля количества inode, обратите внимание на раздел с/var/lib/mysqlи временные каталоги. Если он заполнен, сначала выясните источник роста, не удаляйте вручную файлыibdata,ib_logfile,undoили binlog без утверждённой процедуры. После освобождения места повторите проверку состояния службы. - Найдите реальный сокетЕсли MySQL запущен, выполните
sudo ss -lxnp | grep -E "mysql|maria"и посмотрите путь UNIX-сокета; также проверьте действующие настройкиsocketв конфигурации сервера и клиента. Не ориентируйтесь только на/var/run/mysqld/mysqld.sock: на некоторых системах путь другой. Убедитесь, что приложение обращается к реально существующему сокету. - Согласуйте путьСравните параметр
socketв соответствующих секциях[mysqld]и[client]файла конфигурации с путём из предыдущего шага. В PHP для PDO/MySQLilocalhostиногда выбирает UNIX-сокет, а127.0.0.1— TCP. Изменяйте подключение только после проверки, что сервер слушает нужный способ; перед правкой сохраните конфигурацию приложения. - Проверьте журнал ошибокНа Debian/Ubuntu проверьте
sudo journalctl -u mysql -n 100 --no-pagerи, если файл существует,/var/log/mysql/error.log; в других дистрибутивах расположение журнала отличается. Ищите сообщенияPermission denied,No space left on device,Address already in use, повреждения таблиц. Запишите первую причину отказа, а не только строкуERROR 2002клиента. - Подключитесь по TCPДля независимой проверки TCP в терминале выполните
sudo ss -ltnp | grep 3306; если сервер слушает адрес и TCP-подключение разрешено, попробуйтеmysql -h 127.0.0.1 -P 3306 -u имя_пользователя -pс реальной учётной записью. Не открывайте порт 3306 в Интернет и не используйтеrootиз приложения. Если TCP работает, аlocalhostнет, сосредоточьтесь на пути и правах сокета. - Проверьте праваПри ошибках прав проверьте
ls -ld /run/mysqldи владельца сокета, а также параметры systemd/пакета. Каталог может создаваться службой заново при запуске, поэтому не применяйте рекурсивныйchownк/var/lib/mysqlили системным папкам. Исправляйте права только после сопоставления их с конфигурацией установленного пакета; затем проверьте подключение тем же пользователем. - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
Если служба падает при старте, причина записана в журнале: частые варианты — повреждённый файл ib_logfile, нехватка памяти (OOM-killer, проверьте dmesg | grep -i kill) и конфликт порта. Для восстановления InnoDB используйте параметр innodb_force_recovery = 1 временно и только для выгрузки данных (mysqldump). Сразу после восстановления сделайте резервную копию и уберите параметр. Не удаляйте файлы данных без копии. Для PHP-приложений указывайте хост 127.0.0.1, если сокет настроен нестандартно. Документация — .