MySQL и MariaDB Linux 2002

MySQL: ERROR 2002 (HY000): Can't connect to local MySQL server through socket

  • Обновлено
  • Чтение ≈ 4 минуты
  • Нужны права администратора

Краткий ответ

MySQL ERROR 2002 «Can't connect through socket» означает, что клиент не нашёл сокет сервера. Проверьте, запущена ли служба mysql, путь сокета в my.cnf, место на диске и права; подключайтесь по TCP через 127.0.0.1.

В этой статье
  1. Что означает ошибка
  2. Причины и решения
  3. Пошаговое решение

#Что означает ошибка

2002
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.В журнале ошибок причина запуска.Исправьте и перезапустите.

#Пошаговое решение

  1. Проверьте службуПодключитесь к серверу по SSH под учётной записью с правом просмотра служб. Выполните systemctl status mysql --no-pager для MySQL либо systemctl status mariadb --no-pager для MariaDB; имя зависит от установленного пакета. Если статус active (running), переходите к поиску сокета; если failed/inactive, сохраните последние сообщения и не меняйте файлы данных вручную.
  2. Запустите службуЕсли служба действительно остановлена и разрешён её запуск, выполните sudo systemctl start mysql (или mariadb) и сразу sudo journalctl -u mysql -n 50 --no-pager. Успех — статус active и отсутствие ошибок запуска. Если служба снова падает, не повторяйте запуск многократно: изучите сообщение об ошибке и резервные копии, особенно при повреждении InnoDB.
  3. Проверьте место и inodeВ том же терминале выполните df -h для свободного места и df -i для количества inode, обратите внимание на раздел с /var/lib/mysql и временные каталоги. Если он заполнен, сначала выясните источник роста, не удаляйте вручную файлы ibdata, ib_logfile, undo или binlog без утверждённой процедуры. После освобождения места повторите проверку состояния службы.
  4. Найдите реальный сокетЕсли MySQL запущен, выполните sudo ss -lxnp | grep -E "mysql|maria" и посмотрите путь UNIX-сокета; также проверьте действующие настройки socket в конфигурации сервера и клиента. Не ориентируйтесь только на /var/run/mysqld/mysqld.sock: на некоторых системах путь другой. Убедитесь, что приложение обращается к реально существующему сокету.
  5. Согласуйте путьСравните параметр socket в соответствующих секциях [mysqld] и [client] файла конфигурации с путём из предыдущего шага. В PHP для PDO/MySQLi localhost иногда выбирает UNIX-сокет, а 127.0.0.1 — TCP. Изменяйте подключение только после проверки, что сервер слушает нужный способ; перед правкой сохраните конфигурацию приложения.
  6. Проверьте журнал ошибокНа 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 клиента.
  7. Подключитесь по TCPДля независимой проверки TCP в терминале выполните sudo ss -ltnp | grep 3306; если сервер слушает адрес и TCP-подключение разрешено, попробуйте mysql -h 127.0.0.1 -P 3306 -u имя_пользователя -p с реальной учётной записью. Не открывайте порт 3306 в Интернет и не используйте root из приложения. Если TCP работает, а localhost нет, сосредоточьтесь на пути и правах сокета.
  8. Проверьте праваПри ошибках прав проверьте ls -ld /run/mysqld и владельца сокета, а также параметры systemd/пакета. Каталог может создаваться службой заново при запуске, поэтому не применяйте рекурсивный chown к /var/lib/mysql или системным папкам. Исправляйте права только после сопоставления их с конфигурацией установленного пакета; затем проверьте подключение тем же пользователем.
  9. Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
    Выберите подходящий вариант — это не команды для последовательного выполнения
    Вариант 1Диагностика и запуск MySQL/MariaDB.
    Linux · Терминал (Bash)С осторожностьюНужен sudo
    Диагностика и запуск MySQL/MariaDB.
    sudo systemctl status mysql
    sudo systemctl start mysql
    sudo journalctl -u mysql -n 50 --no-pager
    sudo find / -name "mysqld.sock" 2>/dev/null
    mysql -h 127.0.0.1 -P 3306 -u root -p
    df -h; df -i

    Команда может изменить состояние системы или её настройки. Проверьте параметры и последствия перед запуском.

    Вариант 2Согласованный путь сокета в my.cnf.
    INI
    Согласованный путь сокета в my.cnf.
    [client]
    socket = /var/run/mysqld/mysqld.sock
    [mysqld]
    socket = /var/run/mysqld/mysqld.sock

Если служба падает при старте, причина записана в журнале: частые варианты — повреждённый файл ib_logfile, нехватка памяти (OOM-killer, проверьте dmesg | grep -i kill) и конфликт порта. Для восстановления InnoDB используйте параметр innodb_force_recovery = 1 временно и только для выгрузки данных (mysqldump). Сразу после восстановления сделайте резервную копию и уберите параметр. Не удаляйте файлы данных без копии. Для PHP-приложений указывайте хост 127.0.0.1, если сокет настроен нестандартно. Документация — MySQL: ошибки.

Так эту ошибку тоже называют

Источники и обновления

Последнее обновление статьи: 2 ноября 2026. Версии программ и интерфейсы меняются — если шаги не совпадают с вашей версией, сверяйтесь с документацией производителя.