MySQL и MariaDB LinuxWindowsMySQL Server

MySQL: Не работает подключение MySQL по TCP, хотя сокет доступен

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

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

Соединение по Unix-сокету и TCP — два разных канала подключения MySQL. Клиент может успешно входить через localhost, но получать Connection refused по 127.0.0.1 из-за bind_address, skip_networking, другого порта или сетевого правила.

В этой статье
  1. Как проявляется проблема и где искать причину
  2. Пошаговая диагностика и устранение
  3. Как проверить результат
  4. Если исправление не помогло

#Как проявляется проблема и где искать причину

Соединение по Unix-сокету и TCP — два разных канала подключения MySQL. Клиент может успешно входить через localhost, но получать Connection refused по 127.0.0.1 из-за bind_address, skip_networking, другого порта или сетевого правила.

Возможная причинаКак узнатьЧто делать
TCP отключён или ограниченMySQL слушает только сокет либо другой интерфейсmysql -h localhost работает, -h 127.0.0.1 нетПроверить bind_address и сеть
Путь TCP заблокированСлужба слушает, но сеть не пропускает пакетыНа сервере локальный TCP работает, удалённый нетПроверить безопасные firewall-правила

#Пошаговая диагностика и устранение

  1. 1. Подтвердите различие вариантов подключенияНа сервере выполните два отдельных входа: mysql --host=localhost обычно использует Unix-сокет, mysql --protocol=TCP --host=127.0.0.1 — TCP. Используйте один и тот же пользователь, пароль вводите по запросу.
    Linux · Терминал (Bash)Команда
    Linux/macOS с mysql CLI; проверяет только TCP и запрашивает пароль.
    mysql --protocol=TCP --host=127.0.0.1 --port=3306 --user=appuser --password
  1. 2. Уточните фактический порт и адресВ работающем mysql-соединении через сокет запросите port, bind_address и skip_networking. Значения зависят от конфигурации и версии; если TCP выключен, причина найдена.
  2. mysql-клиент, чтение
    SQLКоманда
    mysql-клиент, чтение.
    SHOW VARIABLES WHERE Variable_name IN ('port', 'bind_address', 'skip_networking');
  1. 3. Проверьте слушающий порт на хостеВ Linux-терминале посмотрите TCP LISTEN на целевом порту; если ничего нет, сервер не слушает этот порт. Если слушает 127.0.0.1, удалённые подключения туда не попадут.
  2. Linux; sudo для показа имени процесса, данные не меняет
    Linux · Терминал (Bash)КомандаНужен sudo
    Linux; sudo для показа имени процесса, данные не меняет.
    sudo ss -ltnp "sport = :3306"
  1. 4. Отделите сетевую проблему от доступаОшибка Connection refused означает отсутствие слушателя или запрет соединения на сетевом уровне; Access denied после соединения относится уже к учётной записи. Не меняйте пароль при отказе TCP.
  1. 5. Проверьте параметры службыВ штатном файле конфигурации MySQL найдите bind-address, port и skip-networking (имена и расположение зависят от пакета). Не применяйте одновременно взаимоисключающие значения и не меняйте параметры рабочего экземпляра без копии файла.
  1. 6. Согласуйте безопасное решениеЕсли приложение на том же сервере, рассмотрите использование сокета либо TCP на loopback. Для удалённого приложения согласуйте частный адрес, firewall с ограничением источников и шифрование, затем испытайте в отдельной среде.
  1. 7. Повторите проверку после измененияПри согласованном изменении конфигурации после теста перезапустите именно нужную службу в окно обслуживания. Повторите ss и клиентский вход с адреса приложения. Успех — только разрешённые клиенты подключаются, база не доступна публично.

#Как проверить результат

Тестовое TCP-подключение проходит с нужного адреса и отклоняется с неразрешённых; сокет продолжает работать.

#Если исправление не помогло

Если сервер работает в Docker, дополнительно проверьте разницу между портом внутри контейнера и опубликованным на хосте.

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

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

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