SystemdDoctor
служба не работает mysql сокеты частое

MySQL: Can't connect to local server through socket

Сообщение о невозможности подключиться через сокет означает одно из двух: сервер не работает или клиент ищет сокет не там, где он создан. Второе часто бывает после смены дистрибутива или ручной сборки.

Вероятные причины

По порядку: сверху то, что встречается чаще.

  1. Сервер не запущен

    Самая частая причина. Сокет создаётся при старте сервера; без него файла нет.

  2. Клиент и сервер используют разные пути к сокету

    Путь задаётся в настройках и различается между дистрибутивами: /run/mysqld/mysqld.sock, /var/lib/mysql/mysql.sock и другие.

  3. Каталог для сокета не создан

    Каталог в /run исчезает при перезагрузке. Если unit-файл не создаёт его через RuntimeDirectory=, сервер не сможет создать сокет.

Диагностика

Команды идут в том порядке, в котором их стоит выполнять: каждая следующая проверяет то, что осталось после предыдущей.

Существует ли сокет и по какому пути.

sudo ss -xln | grep -i mysql

Работает ли сервер.

systemctl status mysql --no-pager | head -8

Настроенные пути к сокету у клиента и сервера.

sudo grep -rh "^socket" /etc/mysql/ 2>/dev/null

Решение

Решение своё для каждой причины. Сначала определите, какая из них ваша, — иначе правки наложатся друг на друга.

1. Сервер не запущен
Почему происходит
Самая частая причина. Сокет создаётся при старте сервера; без него файла нет.
Как проверить
Посмотрите состояние службы.
systemctl status mysql --no-pager | head -8
Как исправить
Запустите службу и разберитесь, почему она не работала: сообщение о сокете тут лишь следствие.
2. Клиент и сервер используют разные пути к сокету
Почему происходит
Путь задаётся в настройках и различается между дистрибутивами: /run/mysqld/mysqld.sock, /var/lib/mysql/mysql.sock и другие.
Как проверить
Сравните путь в настройках и фактический сокет.
sudo grep -rh "^socket" /etc/mysql/ 2>/dev/null
sudo ss -xln | grep -i mysql
Как исправить
Приведите пути к одному значению в разделах клиента и сервера либо передавайте путь ключом при подключении.
mysql --socket=/run/mysqld/mysqld.sock -u root
3. Каталог для сокета не создан
Почему происходит
Каталог в /run исчезает при перезагрузке. Если unit-файл не создаёт его через RuntimeDirectory=, сервер не сможет создать сокет.
Как проверить
Посмотрите каталог и параметр unit.
ls -ld /run/mysqld 2>/dev/null
systemctl show mysql -p RuntimeDirectory
Как исправить
Добавьте RuntimeDirectory=mysqld в переопределение unit-файла — тогда каталог будет создаваться при каждом запуске.

Пример вывода

Клиент ищет сокет по устаревшему пути. Пример показательный: он собран на тестовой машине специально для этой страницы, а не взят из чужого журнала.

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

$ sudo ss -xln | grep mysql
u_str LISTEN 0 70 /run/mysqld/mysqld.sock 12345 * 0

Связанные ошибки

Где встречается чаще всего

Источники

  • Документация MySQL: подключение через сокет документация программы
    сверено 15 сентября 2026
  • Воспроизведено на тестовой машине, systemd 255 (Ubuntu 24.04)
    Воспроизведено расхождением путей в разделах client и mysqld.
    собственная проверка, systemd 255
    сверено 15 сентября 2026