MYSQL отказывается от удаленного подключения с ошибкой «ОШИБКА 2003 (HY000)» и ошибкой TCP 111

#mysql #amazon-web-services #ubuntu

Вопрос:

Я установил MySQL 8.0.25 на экземпляре Ubuntu 20.04 LTS (ARM) на AWS.
Я могу получить к нему доступ, используя адрес 127.0.0.1 локально, но не могу получить к нему удаленный доступ из другого экземпляра.

«Привязка-адрес» изначально был закомментирован, я раскомментировал его и изменил на «0.0.0.0» (служба mysql была перезапущена) — не помогло, поэтому я прокомментировал его обратно.
«Пропустить подключение к сети» нет в файле cnf.

Я изменил порт на 3307, просто чтобы убедиться, что я смотрю на правильный cnf, и теперь MYSQL действительно прослушивает порт 3307: введите описание изображения здесь

локально я могу подключиться с помощью порта 3307, но не удаленно: введите описание изображения здесь

Вот iptables: введите описание изображения здесь

Я знаю, что брандмауэр работает хорошо, потому что, если я удалю порт 3307 из правил, ошибка будет другой: введите описание изображения здесь

Как вы можете видеть, ошибка TCP 111 («Отказано в подключении») стала ошибкой 113 («Нет маршрута к хосту»).

Подключение к Telnet отказано с той же ошибкой:
введите описание изображения здесь

Я перезагрузил экземпляр MySQL — никаких изменений.

Почему MYSQL откажется от удаленного подключения, если «адрес привязки» закомментирован, а брандмауэр открыт?

Комментарии:

1. Я вижу, что он слушает только 127.0.0.1, а не 0.0.0.0. Если вы не привязаны к 0.0.0.0, он не будет доступен удаленно. Когда вы установили адрес привязки, изменился ли ваш netstat?

2. Я не понимаю, как настроена ваша группа безопасности. Можете ли вы также опубликовать это?

3. @RodrigoM — Группа безопасности имеет порты 22, 3306 и 3307, открытые с любого адреса. Если бы проблема заключалась в SG, то закрытие порта в брандмауэре Ubuntu не изменило бы ошибку TCP со 111 на 113.

4. @stdunbar — когда я изменяю «адрес привязки «на» 0.0.0.0 «и перезапускаю MySQL, netstat по-прежнему показывает» 127.0.0.1:3307 » в качестве локального адреса и 0.0.0.0:* в качестве иностранного адреса. i.imgur.com/zhiQkm0.jpeg

Ответ №1:

комментарий @stdunbar указал мне правильное направление.

Проблема возникла из-за того, что я следовал инструкциям по установке MYSQL на https://www.digitalocean.com/community/tutorials/how-to-install-mysql-on-ubuntu-20-04 , и запустил сценарий безопасности при настройке MYSQL:

 sudo mysql_secure_installation
 

По какой — то причине этот скрипт заставляет MYSQL игнорировать bind-address настройку в файле cnf, в то время как он все еще использует port настройку- очень запутанно!

Когда я установил MYSQL без запуска сценария безопасности, «локальный адрес» демона MYSQL в netstat -lnp | grep mysql команде изменился с 127.0.0.1: введите описание изображения здесь

до 0:0:0:0 : введите описание изображения здесь

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

 CREATE USER 'root'@'remotehostname' IDENTIFIED WITH caching_sha2_password BY 'newpassword';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'remotehostname' WITH GRANT OPTION;