ERROR 2003 (HY000): невозможно подключиться к серверу MySQL (111)
Этот вопрос связан со следующими вопросами:
Я настраиваю новый сервер MySQL (5.1) на своей локальной машине. Мне нужно предоставить удаленный доступ к базе данных. Я сделал следующие шаги:
-
Комментарий bind-address
в my.cnf:
# bind-address = 192.168.1.3
-
Предоставляемые привилегии:
GRANT ALL PRIVILEGES ON *.* TO 'nickruiz'@'%' IDENTIFIED BY PASSWORD 'xxxx';
- Настройка перенаправления портов на маршрутизаторе (TCP и UDP, порт 3306, 192.168.1.3)
-
Настроить iptables для брандмауэра
sudo iptables -I INPUT -p udp --dport 3306 -j ACCEPT
sudo iptables -I INPUT -p tcp --dport 3306 --syn -j ACCEPT
sudo iptables-save
-
Перезагрузите сервер mysql sudo /etc/init.d/mysql restart
При тестировании я получаю следующее:
LAN:
mysql -h 192.168.1.3 -u nickruiz -p
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 95
Server version: 5.1.63-0ubuntu0.11.04.1 (Ubuntu)
Пульт дистанционного управления:
mysql -h 1xx.xx.4.136 -u nickruiz -p
ERROR 2003 (HY000): Can't connect to MySQL server on '1xx.xx.4.136' (111)
Очевидно, что-то не так, что мешает мне использовать мой глобальный IP-адрес.
Примечания:
- Я пробовал тестировать удаленное соединение на том же компьютере, а также
через SSH с удаленной машины.
- Я не уверен, что мой провайдер предоставил мне статический IP-адрес.
Любые идеи?
Обновление:
telnet, похоже, не работает.
telnet 192.168.1.3 3306
Trying 192.168.1.3...
Connected to 192.168.1.3.
Escape character is '^]'.
E
5.1.63-0ubuntu0.11.04.1,0g8!:@pX;]DyY0#\)SIConnection closed by foreign host.
Ответы
Ответ 1
Пожалуйста, проверьте свои прослушивающие порты:
netstat -nat |grep :3306
Если он показывает
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN
Это нормально для удаленного подключения.
Но в этом случае я думаю, что у вас
tcp 0 192.168.1.3:3306 0.0.0.0:* LISTEN
Это нормально для вашего удаленного соединения.
Вы также должны проверить свой брандмауэр (iptables, если вы centos/redhat)
services iptables stop
для тестирования или использования:
iptables -A input -p tcp -i eth0 --dport 3306 -m state NEW,ESTABLISHED -j ACCEPT
iptables -A output -p tcp -i eth0 --sport 3306 -m state NEW,ESTABLISHED -j ACCEPT
И еще одно, чтобы проверить ваше разрешение на удаленное подключение:
GRANT ALL ON *.* TO [email protected]'remoteIpadress' IDENTIFIED BY 'my_password';
Ответ 2
errno 111 ECONNREFUSED, я полагаю, что что-то не так с маршрутизатором DNAT.
Также возможно, что ваш интернет-провайдер фильтрует этот порт.
Ответ 3
Убедитесь, что ваш удаленный хост (т.е. сервер веб-хостинга, который вы пытаетесь подключить FROM) позволяет трафик OUTGOING на порту 3306.
Я видел ошибку (100) в этой ситуации. Я мог подключиться с моего ПК /Mac, но не с моего сайта. Экземпляр MySQL был доступен через Интернет, но моя хостинговая компания не разрешала моему веб-сайту подключаться к базе данных на порту 3306.
Как только я попросил мою хостинговую компанию открыть мою учетную запись веб-хостинга до исходящего трафика на порт 3306, мой сайт мог подключиться к моей удаленной базе данных.
Ответ 4
/etc/mysql$ sudo nano my.cnf
Релевантная часть, которая работает для меня:
#skip-networking
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = MY_IP
MY_IP
можно найти с помощью ifconfig
или curl -L whatismyip.org |grep blue
.
Перезагрузите mysql для обеспечения загрузки новой конфигурации:
/etc/mysql$ sudo service mysql restart
Ответ 5
если используемая вами система - CentOS/RedHat, а rpm - это способ, которым вы устанавливаете MySQL, в папке /etc/my.cnf нет, вы можете использовать: #whereis mysql #cd/usr/share/mysql/ cp -f/usr/share/mysql/my-medium.cnf/etc/my.cnf
Ответ 6
У меня есть такой же вопрос, как и вы, я использую wirehark для захвата отправляемых пакетов TCP, я обнаружил, что когда я использую mysql
bin для подключения удаленного хоста, он подключает удаленный порт 3307, что мой falut в /etc/mysql/my.cnf
, 3307 - еще один порт mysql проекта, но я изменяю этот конфиг в части my.cnf
[client], когда я использую параметр -P
для указания порта 3306, это нормально.
Ответ 7
я правильно установил свой адрес привязки, как указано выше, но забыл перезагрузить сервер mysql (или перезагрузить):) face palm - так что источник этой ошибки для меня!
Ответ 8
У меня была такая же проблема с попыткой подключения к удаленному mysql db.
Я исправил это, открыв брандмауэр на сервере db, чтобы разрешить трафик через:
sudo ufw allow mysql
Ответ 9
Иногда, когда у вас есть специальные символы в пароле, вы должны обернуть его в символы ''
, поэтому для подключения к db вы можете использовать:
mysql -uUSER -p'pa$$w0rd'
У меня была такая же ошибка, и это решение решило ее.
Ответ 10
Не уверен, что не можете видеть это поэтапно.
Пожалуйста, попробуйте FLUSH PRIVILEGES [Перезагружает привилегии из таблиц грантов в базе данных mysql]:
привилегии flush;
Вам нужно выполнить его после GRANT
Надеюсь на эту помощь!