Втрачено з’єднання з сервером 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

6
@oneofakind Він має на увазі підключитися до "localhost" замість "127.0.0.1"
Alex Holsgrove

2
У мене була така ж проблема на OSX з mamp pro. Я виправив це, відключивши / повторно включивши прапорець "дозволити доступ до мережі mysql" на вкладці mamp pro mysql.
Усманія

43

Відкрийте файл конфігурації mysql з назвою my.cnf і спробуйте знайти "bind-address", тут замініть налаштування (127.0.0.1 АБО localhost) на ваш ip-сервер живого потоку (ip, який ви використовуєте у функції mysql_connect)

Це однозначно вирішить проблему.

Дякую


2
Переконайтеся, що ви використовуєте bind-address = 127.0.0.1 або localhost, коли використовуєте ssh тунель. Була ця проблема з bitnami, де bind-address був машинним ip.
z2z

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

Слід зазначити, що, як правило, бажано прив'язувати службу mysql туди, 127.0.0.1де це можливо, тому прямий доступ від інших хостів неможливий. Це запобігає віддаленим атакам грубої сили та не наражає на мережу можливі проблеми безпеки. Якщо ваша програма розташована на одній машині (що є дуже поширеною установкою хостингу), використовуйте 127.0.0.1resp. 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
Для мене я забув підтвердити bind-адресу на my.cnf. Дякую.
абкрим

1
Це повністю допомогло. Дякую!
osehgol

1
Працював відмінно, але я використовував верстат на Windows, тому не робив кроку 3. але він працював. Дякую!
RohitAneja

Хоча остання команда не працювала для мене, створення нового користувача своїм способом вирішило мою проблему. Я можу отримати доступ до mysql на малиновому пі зі свого ноутбука. Дякую!
Eyyüp Alkış

пам'ятайте, щоб FLUSH PRIVILEGESпісля створення нового користувача.
Тис Хонг Тат

15

Була ця проблема під час налаштування нового підлеглого сервера. Виявлено, що IP-адреса підлеглого сервера відсутня у /etc/hosts.allowфайлі головного сервера . Додано IP-адресу, і це дозволило мені підключитися до головного сервера.

Зауважте, що я використовую hosts.allowта hosts.denyконтролюю доступ.


моя проблема з роз'ємом / c ++. тепер, якби я міг знайти лише те, що потрібно встановити, allowколи denyмає ALL: ALL...

це дійсно врятувало моє життя, у мене виникли проблеми з підключенням до mysql від workbench, мені потрібно було додати файл "ALL: 127.0.0.1" у файл /etc/hosts.allow, і він почав працювати
Tomáš Tibenský

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

7

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


1
Гарна річ для цієї відповіді. Виявляється, я це зробив сам.
обережнопомилка

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, а bind-адреса була локальною: 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

в моєму випадку у мене було ВСЕ: ВСЕ у hosts.deny. Змінивши це на ВСІ: PARANOID вирішив мою проблему під час з'єднання через ssh


2

Проблема була для мене досить дурною.

Я раніше отримував ту саму проблему на AWS EC2 Ubuntu-машині (MariaDB наразі встановлюється локально), тому я спробував зробити тунелювання 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. Я дав шанс на це і РОБОТИ! Edited 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 start


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. Я зміг підключитися за допомогою мобільної точки доступу.

Перейдіть на мобільну точку доступу або іншу мережу, і якщо вона працює там, ви знаєте, що оригінальна мережа блокує порт 3306. Якщо ви отримуєте ту ж помилку в більш ніж 1 мережі, знаєте, що вона характерна для вашої машини.


1

Firewalldблокує IP-адресу. щоб надати доступ, використовуйте ці команди:

firewall-cmd - постійний --zone = довірений --add-source = YOUR_IP / 32

firewall-cmd - постійний --zone = довірений --add-port = 3306 / tcp

firewall-cmd - перезавантажити


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

У мене була однакова проблема. Щоб виправити це, я просто змінив хост з localhost: 3306 на просто localhost. Таким чином, помилка може виникнути, коли ви відокремлюєте несанкціонований порт для з'єднання. Краще залишити це за замовчуванням.


1
Це, ймовірно, тому що mysql не приймає порт як частину імені хоста, замість цього вам потрібно використовувати аргумент-P 3306
Clay H

0

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


0

Я зіткнувся з тією ж проблемою. Я перевірив і спробував встановити AllowTcpForwarding Так, але він відсутній у моєму 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
  • Ви можете встановити пароль або додати в запиті

Тест-з'єднання. Він повинен бути успішним, тоді натисніть OK.Viola!


0

Якщо bind-address відсутня у вашому файлі конфігурації, а 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 (% wildcard дозволено).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.