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


128

Я получаю сообщение об ошибке:

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

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

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

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

Ответы:


104

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

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

Неужели это так?

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

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


7
что значит localhost? Я также сталкиваюсь с той же проблемой и использую только localhost. Приложение находится на том же компьютере, что и база данных. Что вы имели в виду localhost?
oneofakind 06

6
@oneofakind Он имеет в виду подключиться к «localhost» вместо «127.0.0.1»
Алекс Холсгроув

2
У меня была такая же проблема на OSX с mamp pro. Я исправил это, отключив / повторно включив флажок «разрешить сетевой доступ к mysql» на вкладке mamp pro mysql.
Усман

43

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

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

Спасибо


2
Убедитесь, что вы используете bind-address = 127.0.0.1 или localhost при использовании туннеля ssh. Была такая проблема с битнами, где bind-адрес был ip машины.
z2z 03

1
Та же проблема и решение для автономного выделенного сервера Debian 10 + MySQL.
Vilq

Следует упомянуть, что, как правило, предпочтительнее привязать службу mysql, 127.0.0.1где это применимо, чтобы прямой доступ с других хостов был невозможен. Это предотвращает удаленные атаки методом грубой силы и не подвергает сеть возможным проблемам с безопасностью. Если ваше приложение расположено на том же компьютере (что является очень распространенной настройкой хостинга), используйте 127.0.0.1соотв. localhostв качестве хоста mysql, и он будет работать так же, как привязка службы к внешнему интерфейсу и использование его в качестве хоста mysql. Если ваше приложение находится в другом месте, по возможности используйте внутреннюю сеть.
Дэвид

36

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

1
Я забыл проверить адрес привязки на my.cnf. Спасибо.
abkrim

1
Это полностью помогло. Спасибо!
osehgol

1
Работал отлично, но я использовал верстак на окнах, поэтому не делал шаг 3, но он работал. Спасибо!
RohitAneja

Хотя последняя команда у меня не сработала, создание нового пользователя по-вашему решило мою проблему. Я могу получить доступ к mysql на Raspberry Pi с моего ноутбука. Спасибо!
Эйюп Алкиш,

не забудьте FLUSH PRIVILEGESпосле создания нового пользователя.
Yew Hong Tat

15

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

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


моя проблема с коннектором / c ++. теперь, если бы я только мог найти, какие настройки должны быть, allowкогда denyесть ALL: ALL...

это действительно спасло мне жизнь, у меня были проблемы с подключением к mysql из рабочей среды, мне нужно было добавить «ALL: 127.0.0.1» в файл /etc/hosts.allow, и он начал работать
Томаш Тибенски

В моем случае в / etc / hosts была неправильная (старая) запись для IP-адреса хоста. Когда выдавался новый IP-адрес, он переходил под старый и, казалось, игнорировался. Удаление старого IP устранило ошибку.
Дэвид Рамирес,

7

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


1
Хорошая вещь для этого ответа. Оказывается, я сделал это с собой.
cautionbug

5

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

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


5

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

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

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


4

Я столкнулся с этой же ошибкой при подключении из рабочей среды MySQL. Вот как я это исправил. В моем конфигурационном файле /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, чтобы оно соответствовало адресу привязки

Большое спасибо, у нас также была репликация MySQL, и адрес привязки был локальным: 10.0.0.x. Я несколько дней боролся за это решение.
iFadi

3

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


Подозреваю, что и в моем случае виноват DNS.
Zenexer

3

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

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


3

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

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


Я не думаю, что это правильно, если на этом порту ничего не слушает, вы получите ответ ERROR 2003 (HY000): Can't connect to MySQL server on '127.0.0.1' (61), а не Lost connection to MySQL serverсообщение.
Кен Уильямс

2

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


2

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

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

ssh -L13306:127.0.0.1:3306 root@ip.address -i my/private/key.pem

И он сказал мне следующее:

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

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

Так что проверьте пользователя, подключающегося к SSH.

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


2

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

Как мы видим здесь: вместо пропуска сети по умолчанию теперь прослушивание происходит только на локальном хосте, который более совместим и не менее безопасен.


К моему большому удивлению, этот работал под Debian 10. Я дал ему шанс и РАБОТАЕТ! Отредактировал конфиг mysql sudo nano /etc/mysql/mariadb.conf.d/50-server.cnfи вместо bind-address = 111.112.113.114я использовал bind-address = 127.0.0.1. Настройки туннеля SSH установлены, как описано на hostpresto.com/community/tutorials/ ... Молодец! Спасибо!
Klor

1

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

mysql> FLUSH PRIVILEGES;

1

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

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


6
Все адреса / интерфейсы, но только один порт.
Zenexer

1

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

запуск службы mysqld


1

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

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

Эта настройка была внутри /etc/ssh/sshd_config

PermitTunnel no

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

PermitTunnel yes

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


1

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

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

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

sudo service docker restart


1

В моем случае это был порт 3306, блокирующий университетский Wi-Fi. Я смог подключиться через мобильную точку доступа.

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


1

Firewalldблокирует IP-адрес. поэтому, чтобы предоставить доступ, используйте эти команды:

firewall-cmd --permanent --zone = доверенный --add-source = ВАШ_IP / 32

firewall-cmd --permanent --zone = доверенный --add-port = 3306 / tcp

firewall-cmd --reload


0

При удаленном подключении к 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.


0

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


1
Вероятно, это связано с тем, что mysql не принимает порт как часть имени хоста, вместо этого вам нужно использовать аргумент-P 3306
Clay H

0

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


0

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

В рабочей среде выберите +, чтобы добавить новое соединение, и установите следующее:

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

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


0

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


0

Я сделал ниже 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;


0

У меня была аналогичная ошибка (подключение к MYSQL на aws через MYSql Workbench). Раньше я подключался нормально, и вдруг он перестал работать и просто не работал снова). Мое соединение было через SSH, защищенное ключевым файлом.

Оказывается, у меня был тайм-аут. Поэтому я увеличил тайм-аут SQL-соединения до 30 секунд (по умолчанию 10) и снова начал работать. что попробовать (если вы находитесь в аналогичной настройке)

  1. Можете ли вы использовать ssh напрямую с терминала на сервер (обнаруживает проблемы с правами доступа к ключевым файлам и т.д.)?
  2. Можете ли вы затем через терминал подключиться к MySQL с тем же пользователем / pwd, используя что-то вроде mysql -u [username] -p [database] ? Это проверит наличие проблем с правами пользователя и т. Д.
  3. если оба из них работают, то ваши параметры не являются проблемой и, возможно, такая же проблема с тайм-аутом, как у меня (за исключением того, что он никогда не говорил об ошибке тайм-аута, а скорее просил проверить разрешения и т.

0

Ограниченное дисковое пространство может вызвать эту ошибку.

Проверьте место на диске

$ df -h

Попробуйте увеличить место, если диски используются на 100%.

В моем случае: у меня есть коробка Vagrant (8.0.1) (Ubuntu 16.04) Емкость моего диска mysql составляла 10 ГБ, я увеличил ее до 20 ГБ

$ sudo lvextend -L20G -r /dev/mapper/homestead--vg-mysql--master

Затем перезапустите mysql

$ sudo service mysql restart

0

Если вы сталкиваетесь с этим erorr, подключающимся с удаленного компьютера, перейдите к удаленной опции mysql в cpanel и затем добавьте% в Host (разрешен подстановочный знак%).

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.