#Что означает неисправность и в каких условиях возникает
Ошибка ERROR 1130 (HY000): Host ... is not allowed to connect to this MySQL server означает, что сервер MySQL не разрешает соединение с данного исходного узла по имеющимся правилам учётных записей. Она отличается от ошибки 1045 при проверке пароля и от сетевого отказа 2003. Правильное решение — разрешить только конкретный сервер приложения, сохранив сетевую изоляцию и минимальные права. Добавлять учётную запись для всех адресов (%) ради проверки не следует.
#Возможные причины: как различить
| Возможная причина | Как узнать | Что делать |
|---|---|---|
| Нет записи для исходного узлаУ пользователя настроен доступ только с localhost, а приложение перенесли на другой сервер. | Сообщение 1130 показывает новый адрес источника, на старом сервере вход работает. | Создать согласованную учётную запись с ограниченным Host. |
| Изменился исходный адрес клиентаВ облаке, контейнере или после миграции изменился внешний адрес узла. | IP в ошибке не равен ожидаемому адресу. | Определить фактический адрес, обновить разрешённый Host и фильтрацию сети. |
| Неправильная запись DNS или HostПроверка имени сервера влияет на сопоставление с разрешённым Host. | Адрес либо имя не совпадают с правилами. | Проверить настройки разрешения адресов и использовать предсказуемую схему ACL. |
#Пошаговая диагностика и устранение
- Различите код 1130 и сетевые ошибкиНайдите полную строку ERROR 1130 (HY000). Если вместо неё timeout, connection refused или ERROR 2003, соединение не дошло до проверки разрешённых узлов; сначала проверьте адрес, порт 3306, сетевую доступность и брандмауэр, не открывая базу в Интернет. Для 1130 продолжайте проверку учётных записей.
- Определите реальный сервер-источникПодключитесь к машине приложения по SSH и посмотрите в конфигурации, какой узел MySQL указан. В записях сервера MySQL и сообщении об ошибке найдите фактический IP клиента; при контейнерах и NAT это может быть не адрес виртуального интерфейса внутри контейнера. Уточните у сетевого администратора маршрут и адрес, с которого сервер видит приложение.
- Убедитесь, что подключаетесь к нужной БДНа сервере приложения в терминале используйте
mysql -h db.internal.example -u app_user -p, заменив фиктивный домен внутренним адресом и имя своим. Введите пароль только по запросу. Если вы получили именно 1130, сохраните адрес и время; если 1045, запись Host найдена, а проблема уже в учётных данных или аутентификации. - Проверьте существующие записи MySQLНа стороне БД в административном mysql выполните
SELECT User,Host FROM mysql.user WHERE User='app_user';, заменив имя. Посмотрите, есть ли пара для конкретного IP/имени клиента.app_user@localhostиapp_user@192.0.2.10— разные учётные записи; отсутствие строки не нужно исправлять расширением существующей записи до %. - Согласуйте минимальное разрешениеЕсли новой машине действительно нужен доступ, DBA создаёт либо обновляет только подходящую учётную запись для конкретного адреса клиента и предоставляет только нужные права к базе приложения. Для TLS используйте согласованные сертификаты/настройки, не отключайте проверку. Со стороны сети разрешите трафик лишь между двумя указанными серверами, не открывайте порт 3306 всем.
- Проверяйте изменения вне опасного рабочего сеансаДо изменения сохраните вывод
SHOW GRANTS FOR ...для целевой пары user@host и запись о текущих сетевых правилах. Согласуйте тестовую проверку с нужного узла, чтобы не нарушить доступ других приложений. Если создаётся новая узкоспециализированная учётная запись, фиксируйте, как её отозвать через администратора; не меняйте глобальные параметры безопасности. - Повторите попытку подключения и простой запросС машины приложения вновь выполните mysql -h ... -u ... -p, затем
SELECT 1;в mysql. Если успешно, проверьте страницу и фоновые задания. Если возникает 1045, проблема перешла к аутентификации; если соединения нет на уровне сети, сохраните код и проверьте брандмауэр и маршрутизацию отдельно. - Верните ограничения при неудачеЕсли создание ограниченной записи не помогло, отмените выданное разрешение через DBA, восстановите прежние настройки сети и изучите DNS, адрес за NAT и правила аутентификации MySQL. Не выполняйте
FLUSH HOSTSдля 1130: эта операция предназначена для другой ошибки — блокировки хоста из-за числа ошибок соединения (1129). - Команды для отдельных ситуацийВыберите только подходящий вариант. Это не одна последовательность: часть команд диагностирует проблему, а часть меняет настройки или данные.
#Как проверить исправление и что делать, если оно не помогло
Успех — соединение с реального сервера приложения выполняет SELECT 1 и использует ожидаемую пару user@host, при этом доступ с непредусмотренных адресов остаётся закрытым. Если 1130 остаётся, приложите к заявке текст сообщения без паролей и фактический исходный адрес клиента.