Потерянное соединение с сервером MySQL при "считывании исходного пакета связи", системная ошибка: 0

Я получаю ошибку:

"Потерянное соединение с сервером MySQL при чтении исходного пакета связи, системная ошибка: 0"

пока я собираюсь подключить свой db.

Если я использую localhost, все работает нормально. Но когда я использую свой живой IP-адрес, как показано ниже, он получает ошибку:

mysql_connect("202.131.xxx.106:xxxx", "xxxx", "xxxxx") or die(mysql_error());

Ответ 1

Кто-то здесь предполагает, что это может быть проблема с брандмауэром:

Я только что столкнулся с этой проблемой и обнаружил, что это мой брандмауэр. Я использую PCTools Firewall Plus, и он не разрешал полный доступ к MySQL. Однажды я изменил, что это было хорошо. Надеюсь, это поможет.

Может ли это быть?

Кроме того, кто-то здесь предполагает, что это может быть связано с тем, что сервер MySQL связан с IP-адресом обратной связи (127.0.0.1/localhost), который эффективно отключает вас от подключения извне.

Если это так, вам нужно загрузить скрипт на веб-сервер (который, вероятно, также работает на сервере MySQL) и сохранить хост сервера как "localhost".

Ответ 2

Откройте файл конфигурации mysql с именем my.cnf и попробуйте найти "bind-address", замените параметр (127.0.0.1 или localhost) на ваш IP-адрес в реальном времени (ip, который вы используете в функции mysql_connect)

Это решит проблему определенно.

Спасибо

Ответ 3

1) Разрешить удаленное подключение к MySQL. Редактировать файл:

>sudo nano /etc/mysql/my.cnf

Строка комментария:

#bind-address       = 127.0.0.1

Перезапустить MySQL:

>sudo service mysql restart

2) Создайте пользователя для удаленного подключения.

>mysql -uroot -p

CREATE USER 'developer'@'localhost' IDENTIFIED BY 'dev_password';
CREATE USER 'developer'@'%' IDENTIFIED BY 'dev_password';

GRANT ALL ON *.* TO 'developer'@'localhost';
GRANT ALL ON *.* TO 'developer'@'%';

3) В моем случае мне нужно подключиться удаленно от Windows к машине VirtualBox с помощью Ubuntu. Поэтому мне нужно разрешить порт 3306 в iptables:

>iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ACCEPT

Ответ 4

При возникновении этой проблемы при настройке нового подчиненного сервера. Было обнаружено, что IP-адрес подчиненного сервера отсутствовал на главном сервере /etc/hosts.allow. Добавлен IP-адрес, и он позволяет мне подключиться к главному серверу.

Обратите внимание, что я использую hosts.allow и hosts.deny для управления доступом.

Ответ 5

У меня была эта проблема, и в конечном итоге это был предыдущий sys admin, изменивший порт MySQL. MySQL Workbench пытался подключиться к 3306 по умолчанию, но сервер работал на 20300.

Ответ 6

Проблема в моем случае заключалась в том, что MySQL привязывался только к lo on linux. для решения проблемы я отредактировал файл my.cnf(найденный в /etc/mysql/my.cnf), удалив строку bind-address = 127.0.0.1

это позволяет mysql связываться с любым сетевым интерфейсом

Ответ 7

Эта ошибка возникла при попытке подключения к Google Cloud SQL с помощью MySQL Workbench 6.3.

После небольшого исследования я обнаружил, что мой IP-адрес был изменен интернет-провайдером, и он не был разрешен в Cloud SQL.

Я разрешил это и вернулся к работе.

Ответ 8

Проблема для меня заключалась в том, что DNS-запросы были заблокированы FW в подсети. Решение заключалось в отключении DNS-запросов в MySQL.

Ответ 9

Ошибка означает, что он не получил ответ от порта, на который он ожидал найти сервер. Причины могут быть связаны с неправильной машиной (по одному из нескольких причин), чтобы сервер не находился на ожидаемом порту.

Проверьте, к какому порту подключен ваш сервер в /etc/mysql/my.cnf. Соответствует ли это тому, что находится в вашем заявлении connect. Если они совпадают, попробуйте подключиться к mysql с самого сервера и из командной строки машины, на которой вы запускаете клиент. Если он работает, это одно место, а не другое, то может возникнуть проблема с настройкой брандмауэра/маршрутизатора.

Ответ 10

Я просто установил mysql в окне окна. Я получил ошибку OP при попытке установить соединение с клиентом Navicat MySql в том же поле. Я должен был указать 127.0.0.1 в качестве хоста, и он получил его.

localhost, или фактический IP-адрес сервера не работал.

Ответ 11

Я столкнулся с этой же ошибкой при подключении из MySQL Workbench. Вот как я это исправил. В моем файле конфигурации /etc/my.cnf значение привязанного адреса было установлено на IP-адрес сервера. Это должно было быть сделано для настройки репликации. Во всяком случае, я решил это, выполнив две вещи:

  1. создать пользователя, который можно использовать для подключения с адреса привязки в файле my.cnf

например

CREATE USER 'username'@'bind-address' IDENTIFIED BY 'password';
GRANT ALL PRIVILEGES ON schemaname.* TO 'username'@'bind-address';
FLUSH PRIVILEGES;
  1. измените значение имени хоста MySQL в деталях соединения в рабочей среде MySQL, чтобы соответствовать адресу привязки

Ответ 12

В моем случае у меня было ВСЕ: ВСЕ в hosts.deny. Изменение этого на ВСЕ: PARANOID решил мою проблему при подключении через ssh

Ответ 13

Для меня работала настройка bind-address = 0.0.0.0 в mysql/my.cnf. Он в основном прослушивает все адреса (но еще один порт).

И не забудьте перезагрузить сервер: systemctl restart mysql

Ответ 14

Проблема была для меня довольно глупой.

Я использовал эту проблему на машине AWS EC2 Ubuntu (на данный момент MariaDB установлен локально), поэтому я попытался выполнить туннелирование SSH и имел ту же проблему. Поэтому я попытался выполнить туннель ssh через терминал:

ssh -L13306:127.0.0.1:3306 [email protected] -i my/private/key.pem

И он сказал мне это:

Пожалуйста, войдите в систему как пользователь "ubuntu", а не пользовательский "root".

Я изменил ssh-пользователя с root на ubuntu, как и на мою конфигурацию ssh, и он подключился просто отлично.

Итак, проверьте, подключен ли пользователь SSH.

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

Ответ 15

Перейдите в эту же проблему, привяжите адрес туда и обратно безрезультатно. Решение для меня было привилегии очистки.

mysql> FLUSH PRIVILEGES;

Ответ 16

У меня была такая же проблема, но в моем случае я решил ее с помощью

служба mysqld start

Ответ 17

Для меня был найден файл конфигурации "/etc/mysql/mysql.conf.d/mysqld.cnf", комментирующий адрес привязки сделал трюк.

Как мы видим здесь:   Вместо skip-networking по умолчанию теперь прослушивается только  localhost, который более совместим и не менее безопасен.

Ответ 18

При подключении к Mysql удаленно, я получил ошибку. У меня было это предупреждение в /var/log/mysqld.log:

[Warning] IP address 'X.X.X.X' could not be resolved: Temporary failure in name resolution

Я просто добавил эту строку в файл /etc/hosts:

X.X.X.X some_name

Проблема решена! Не использование skip-name-resolve вызвало некоторые ошибки в моем локальном приложении при подключении к MySQL.

Ответ 19

У меня была идентичная проблема. Чтобы исправить это, я просто сменил хост с localhost: 3306 на просто localhost. Таким образом, ошибка может возникать при отключении несовместимого порта для подключения. Лучше оставить его по умолчанию.

Ответ 20

Реестр чтения и записи каталога базы данных также является проблемой, которую я нашел. Просто убедитесь, что ваше приложение может rw файлы в местоположении db. Попробуйте chmod 777 для тестирования.

Ответ 21

Я сделал ниже 3 шага, затем работал на меня.

  1. bind-address = "YOUR MACHINE IP" в файле my.cnf адресу /etc/my.cnf

  2. Перезапустите службу командой: service httpd restart

  3. GRANT ALL PRIVILEGES ON yourDB.* TO 'username'@'YOUR_APPLICATION_IP' IDENTIFIED BY 'YPUR_PASSWORD' WITH GRANT OPTION;

Ответ 22

Брандмауэр apache блокирует ip-адрес. поэтому для предоставления доступа используйте следующие команды:

firewall-cmd -permanent --zone = trusted -add-source = YOUR_IP/32

firewall-cmd -permanent --zone = trusted -add-port = 3306/tcp

firewall-cmd --reload

Ответ 23

Я столкнулся с такой же проблемой. Я проверил и попытался установить AllowTcpForwarding Да, но он отсутствовал в моем sshd_config, поэтому никакой помощи. Я не изменил sshd_config или my.cnf. Убедитесь, что имя ssh не совпадает с именем mysql (используйте localhost).

В workbench выберите + для добавления нового подключения и установите следующее:

  • метод подключения: стандартный TCP/IP через SSH
  • SSH Имя хоста: 192.168.0.50:22 (замените удаленный SSH-сервер IP и порт (необязательно))
  • SSH Имя пользователя: sshuser
  • Вы можете установить пароль или добавить в приглашении
  • Имя хоста MYSQL: localhost или 127.0.0.1
  • Порт сервера MYSQL: 3306
  • Вы можете установить пароль или добавить в приглашении

Проверить соединение. Он должен быть успешным, тогда нажмите ОК. Виола!

Ответ 24

Еще одна причина...

Я столкнулся с сервером Ubuntu, где все было настроено и не смог подключиться из-за той же ошибки.

Этот параметр был внутри /etc/ssh/sshd_config

PermitTunnel no

После превращения в

PermitTunnel yes

Я был в состоянии удаленно подключиться к моей базе данных MySQL

Ответ 25

Если bind-адрес отсутствует в вашем файле конфигурации и mysql размещен на экземпляре AWS, проверьте свою группу безопасности. В идеальных условиях входящие правила должны принимать все соединения от порта 3306, а исходящее правило должно отвечать на все действительные IP-адреса.

Ответ 26

Я пытаюсь подключить мой док-контейнер db на Ubuntu 18.04, та же проблема.

Сначала проверьте ваше устройство, запустив nmcli dev чтобы проверить, подключено ли устройство docker0.

Если он не подключен, попробуйте перезапустить службу Docker:

sudo service docker restart

Ответ 27

Я использую Windows, и моя проблема все еще сохраняется. Я не хочу использовать локальную БД MySQL, я пытаюсь подключиться к моему веб-сайту БД MySQL. Любая идея?

База данных: website_db Имя пользователя: website_un Пароль: 12A_B56 сервер: website.ws порт: 3306

В "cPanel-> Удаленный MySQL" я добавил IP-адрес своего ПК.