Код ошибки 2003: почему не удаётся подключиться к MySQL-серверу и как это исправить

Ошибка ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061) появляется в тот момент, когда клиент — консольный mysql, MySQL Workbench, phpMyAdmin или скрипт вашего сайта — пытается установить TCP/IP-соединение с сервером баз данных, но не получает ответа. В отличие от ошибок авторизации вроде 1045, код 2003 означает, что клиент вообще не «достучался» до сервера: соединение отклонено ещё до проверки логина и пароля. Поэтому менять пароль root или права пользователя на этом этапе бессмысленно — проблема лежит на уровне службы, сети или конфигурации.

Чаще всего запрос «код ошибки 2003» связан именно с MySQL и его форком MariaDB, поэтому дальше разберём диагностику для Windows и Linux. Логика везде одна: сначала убеждаемся, что сервер запущен, затем проверяем порт, сетевые ограничения и параметры подключения. Начнём с самой частой причины.

Почему возникает ошибка 2003: основные причины

Код 2003 — это не одна конкретная поломка, а «зонтичный» сигнал о невозможности установить соединение. Прежде чем что-то менять, полезно понять, какой именно сценарий у вас.

  • 🔴 Служба MySQL остановлена или упала при старте — самая частая причина, особенно после перезагрузки системы или обновления.
  • 🌐 Неверный хост или порт в строке подключения: клиент стучится не туда, где слушает сервер.
  • 🧱 Брандмауэр или антивирус блокирует входящие соединения на порт MySQL (по умолчанию 3306).
  • 🔗 Параметр bind-address в конфигурации привязывает сервер только к 127.0.0.1, а вы подключаетесь с другой машины.
  • 💾 Сервер не стартует из-за повреждённых данных, нехватки места на диске или ошибок в файле конфигурации.

Обратите внимание на текст после кода. Формулировка (10061) в Windows означает «connection refused» — порт закрыт или никто его не слушает. Тайм-аут без кода 10061 чаще указывает на сетевую фильтрацию: пакеты просто не доходят.

Шаг 1. Проверяем, запущен ли сервер MySQL

Первое действие — убедиться, что процесс сервера вообще работает. В Windows откройте оснастку служб: нажмите Win + R, введите services.msc и найдите службу с именем вроде MySQL, MySQL80 или MariaDB — точное имя зависит от версии и способа установки. Если статус не «Выполняется», попробуйте запустить её вручную и посмотрите, что произойдёт.

В Linux состояние проверяется одной командой:

sudo systemctl status mysql

Если служба падает сразу после запуска, причина почти всегда записана в журнал ошибок. Его расположение зависит от установки: в Linux это обычно файлы в каталоге /var/log/mysql/ или вывод journalctl -u mysql, в Windows — файл .err в каталоге данных сервера. Откройте журнал и посмотрите последние строки: там будет конкретная причина остановки — повреждённая таблица, занятый порт, синтаксическая ошибка в конфиге или нехватка прав.

⚠️ Внимание: если в журнале видны ошибки повреждения таблиц (например, упоминания InnoDB corruption), не перезапускайте сервер в цикле и не удаляйте файлы данных. Сначала сделайте копию каталога данных — дальнейшие действия по восстановлению зависят от версии сервера и должны выполняться по официальной документации.

Шаг 2. Проверяем порт и параметры подключения

Даже работающий сервер бесполезен, если клиент подключается не туда. Убедитесь, что MySQL слушает ожидаемый порт — по умолчанию 3306, но его могли изменить в конфигурации.

netstat -an | find "3306"

Команда выше — для Windows; в Linux аналогичную проверку выполняют через ss -tlnp | grep 3306. Если в выводе нет строки со статусом LISTENING, сервер либо не запущен, либо настроен на другой порт, либо работает только через локальный сокет без TCP.

Далее сверьте параметры, которые передаёт клиент: хост, порт и протокол. Типичная ошибка — указывать localhost там, где клиентская библиотека вместо TCP пытается использовать сокет-файл, которого нет по ожидаемому пути. В таких случаях явное указание 127.0.0.1 вместо localhost нередко меняет поведение подключения.

📊 Где именно вы столкнулись с ошибкой 2003?
Консольный клиент mysql
MySQL Workbench
phpMyAdmin
Скрипт сайта (PHP/Python и т.п.)

Шаг 3. Разбираемся с брандмауэром и bind-address

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

Во-первых, брандмауэр. В Windows откройте «Брандмауэр Защитника Windows» → «Правила для входящих подключений» и убедитесь, что порт 3306 разрешён, либо создайте новое правило для порта TCP 3306. В Linux проверьте ufw или firewalld — в зависимости от того, что используется в вашем дистрибутиве. Сторонние антивирусы с сетевым экраном тоже стоит временно проверить.

Во-вторых, параметр bind-address в конфигурационном файле сервера (my.ini в Windows, my.cnf или файлы в /etc/mysql/ в Linux). Значение 127.0.0.1 означает, что сервер принимает соединения только с самого себя. Для удалённого доступа указывают адрес сетевого интерфейса или 0.0.0.0, после чего сервер перезапускают.

⚠️ Внимание: открытие MySQL наружу через bind-address 0.0.0.0 без ограничения доступа на уровне брандмауэра и отдельных учётных записей — серьёзный риск безопасности. Разрешайте подключения только с доверенных адресов и никогда не выставляйте порт 3306 в открытый интернет без необходимости.

☑️ Диагностика ошибки 2003 по порядку

Выполнено: 0 / 6

Шаг 4. Типичные сценарии по клиентам

Один и тот же код 2003 в разных инструментах имеет свои нюансы. Сведём их в таблицу, чтобы быстрее сориентироваться.

КлиентЧастая причинаЧто проверить
Консольный mysqlСервер остановлен или другой портСтатус службы, параметр --port
MySQL WorkbenchНеверные параметры в сохранённом соединенииHostname, Port, метод подключения (TCP/SSH)
phpMyAdminВеб-сервер не видит MySQLНастройки config.inc.php, хост 127.0.0.1
Скрипт сайта (PHP, Python)Неверный хост в строке DSNКонфиг приложения, доступность порта с хоста приложения
Удалённое подключениеbind-address или брандмауэрСетевые правила и привязка адреса на сервере

Отдельный случай — локальные сборки вроде XAMPP, OpenServer или Denwer. Там MySQL запускается из панели управления сборки, а не как системная служба. Если панель показывает, что модуль не стартует, смотрите лог прямо из интерфейса сборки: частая причина — порт 3306 уже занят другим экземпляром MySQL, установленным ранее.

Шаг 5. Когда ничего не помогло

Если служба не стартует, а журнал указывает на повреждение данных, дальнейшие действия зависят от конкретной ситуации, и универсальной безопасной команды здесь нет. Общий безопасный порядок такой: остановите попытки запуска, скопируйте весь каталог данных в отдельное место как резервную копию, а затем действуйте по официальной документации вашей версии сервера — для InnoDB существуют режимы восстановления, но их применение и последствия различаются.

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

Почему localhost и 127.0.0.1 — не всегда одно и то же

В MySQL-клиентах значение localhost часто трактуется особо: вместо TCP-соединения клиент пытается подключиться через Unix-сокет (Linux) или именованный канал (Windows). Если сокет отключён или лежит по другому пути, возникает ошибка подключения. Указание 127.0.0.1 принудительно включает TCP-режим, поэтому это рабочий способ обойти проблему с сокетом.

Часто задаваемые вопросы

Ошибка 2003 — это проблема с логином или паролем?

Нет. Код 2003 возникает на этапе установки соединения, до проверки учётных данных. Ошибки авторизации имеют другие коды, например 1045 (Access denied). Если вы видите 2003, с паролем всё в порядке — клиент просто не может достучаться до сервера.

Что означает число 10061 в тексте ошибки?

Это системный код Windows, означающий «connection refused» — на указанном адресе и порту никто не принимает соединения. Практически всегда это значит, что служба MySQL остановлена или слушает другой порт.

Можно ли исправить ошибку переустановкой MySQL?

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

Ошибка появляется только при подключении с другого компьютера. Что делать?

Проверьте три вещи: параметр bind-address на сервере (он не должен ограничиваться 127.0.0.1), правила брандмауэра на входящие соединения по порту 3306 и наличие у MySQL-пользователя прав на подключение с вашего хоста. Учётная запись вида 'user'@'localhost' не сможет подключиться удалённо — это отдельная настройка, выполняемая после того, как сеть заработает.

Где найти файл конфигурации my.ini или my.cnf?

Точный путь зависит от версии и способа установки. В Windows файл обычно лежит в каталоге установки MySQL или в скрытой папке ProgramData; в Linux — в /etc/mysql/ или /etc/. Узнать, какие файлы реально читает ваш сервер, можно командой mysqld --help --verbose — в её выводе перечислены пути поиска конфигурации.