PHP PDO: SQLSTATE[HY000] [2002] Connection refused

  • Обновлено
  • Чтение ≈ 2 минуты

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

Проверьте, запущен ли MySQL, хост, порт и сокет.

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

#Что означает сообщение

Сообщение
Connection refused

Проверьте, запущен ли MySQL, хост, порт и сокет.

#Причины и признаки

Возможная причинаКак узнатьЧто делать
MySQL остановленНа адресе нет слушающего MySQLПроверить службу и журналы
Неверный хостlocalhost ведёт в другой сокет/контейнерПроверить DSN и среду клиента
Неверный портУказан не тот порт экземпляраСверить реальную настройку СУБД
ФайрволПуть до DB-host фильтруется сетьюПроверить соединение из контейнера приложения

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

  1. Отделите отказ TCP от отказа в паролеОшибка SQLSTATE[HY000] [2002] Connection refused обычно возникает до аутентификации: по выбранному адресу или сокету никто не принимает подключение. Откройте конфигурацию PDO и проверьте host, port, dbname или unix_socket; пароль пока не меняйте. Сохраните полный текст без секретных данных. localhost в драйвере MySQL на Unix часто использует Unix-сокет, а 127.0.0.1 — TCP; это разные способы подключения.
  2. Проверьте MySQL/Percona и адрес прослушиванияНа Linux-сервере выполните systemctl status mysql или systemctl status mariadb в зависимости от реально установленной службы; затем ss -ltnp | grep 3306 для TCP, если ожидается порт 3306. На Windows проверьте соответствующую службу через Win+R → services.msc. Если служба не работает, сначала изучите её журнал и свободное место; запускать её снова допустимо только после устранения причины падения. Не удаляйте файлы базы данных.
  3. Проверьте соединение из той же среды, где работает PHPЕсли PHP работает в контейнере, 127.0.0.1 означает сам контейнер, а не соседнюю базу: проверьте имя сервиса Docker Compose и сеть. На Unix уточните реальный путь сокета у сервера и в PHP. Для TCP с машины приложения выполните nc -vz db.example.local 3306 с подстановкой реального хоста; если порт недоступен, выясняйте сетевой маршрут и ограничения доступа. Не открывайте MySQL на весь интернет.
  4. Повторите запрос и проверьте новое сообщениеПосле исправления хоста/службы выполните тест подключения с отдельной учётной записью приложения и запрос SELECT 1. Если ошибка сменилась на Access denied for user, TCP уже доступен: отдельно проверяйте пользователя, пароль и разрешённый хост, не смешивая причины. Удалите временные отладочные скрипты и не выводите DSN с паролем на публичную страницу.

#На что обратить внимание

Не открывайте 3306 всему интернету и не подставляйте root в веб-приложение. Для контейнеров учитывайте, что localhost относится к текущему контейнеру, а не к хосту БД.

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

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

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