Подтвердить что ты не робот

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.
4b9b3361

Ответ 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

Надеюсь на эту помощь!