MySQL відмовляється приймати віддалені з'єднання


13

Я щойно встановив свіжий сервер ubuntu з mysql (percona 5.5), але він відмовляється приймати з'єднання від віддалених хостів

Ось що відбувається, якщо я спробую віддалено підключитися до цього сервера:

mysql -h10.0.0.2 -uroot -pmypassowrd
ERROR 2003 (HY000): Can't connect to MySQL server on '10.0.0.2' (111)

telnet 10.0.0.2 3306
Trying 10.0.0.2...
telnet: Unable to connect to remote host: Connection refused

Коли я перевірив, чи mysql слухає віддалені з'єднання, я побачив таке:

sudo netstat -ntlup | grep mysql
tcp        0      0 127.0.0.1:3306          0.0.0.0:*               LISTEN      127018/mysqld 

Як ви бачите, це говорить, 127.0.0.1:3306що означає "Я приймаю лише локальні з'єднання".

Я перевірив свої skip_networkingта bind-addressзмінні - все вимкнено:

mysql> show variables like '%skip_networking%';
+-----------------+-------+
| Variable_name   | Value |
+-----------------+-------+
| skip_networking | OFF   |
+-----------------+-------+
1 row in set (0.00 sec)

mysql> show variables like '%bind%';
Empty set (0.00 sec)

У мене є ще один сервер з абсолютно таким же конфігурацією, і він чудово працює:

sudo netstat -ntlup | grep mysql
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2431/mysqld 

Що може бути причиною цього? Як змусити mysql реагувати на віддалені з'єднання?


Зауважте, що змінна bind_addressдоступна лише з версії 5.6 ( bugs.mysql.com/bug.php?id=44355 ), тому вона поверне порожній набір у v5.5, навіть якщо вона встановлена.
факер

Покажіть нам свої налаштування my.cnf.
користувач9517

Чи перевіряли ви проблеми, що не входять до mySQL, наприклад, брандмауер чи проблема маршрутизації?
Stese

Відповіді:



0

Це може бути пов'язано з таблицею користувачів бази даних mysql (використовувати mysql; показати таблиці;). Якщо прив'язка до 0,0.0.0 не працює для вас, спробуйте надати своєму користувачу хост '%' замість 'localhost' у цій таблиці.

Наприклад, спробуйте створити користувача, наприклад:

СТВОРИТИ ПОТРІБНИК yourusername @ '%' ІДЕНТИФІКОВАНО "Вашим паролем"

ant спробуйте підключитися до цього користувача.


3
Відмова від підключення зазвичай означає, що нічого не слухається у відповідному порту IP:
користувач9517

Правда, мене спалахнуло "Не можу підключитися до сервера MySQL", я не згадую в telnet. Вибачте.
periket2000

"Не вдається підключитися до MySQL" не походить від привілею, недоступного для користувача. Це пара {IP: port}, яка не відповідає спробі з'єднання.
Фаб’єн Хаддаді

0

Коли все інше не вдається, і ви впевнені, що сервер слухає порт за замовчуванням і ви намагаєтесь відчайдушно з'єднатися з клієнтом mysql від іншого хоста, спробуйте вказати порт у URL-адресі команди mysql.

Як не дивно, мені довелося використовувати такий синтаксис:

mysql -h someHost --port=3306 -u someUser -p someDb

Я знайшов це (помилка?) Зовсім випадково (після втрати волосся :)).

Моя установка: debian jessie, свіжий mysql 5.7.18, створено користувачів / db, коментується прив'язка-адреса, перезапускається mysqld


Раціональним поясненням є те, що сервер someHost MySQL насправді слухає на 3306, як це демонструє директива --port. Але ваш клієнтський бінарний mysql походить від версії MariaDB ... тому використовується порт 3307 за замовчуванням, якщо не вказано інше. Перевірте походження клієнтського двійкового файлу mysql, який ви використовуєте. Підказка: перевірте також свою змінну середовища PATH ...
Фабієн Хаддаді,

0

У мене просто виникло це питання, і моє питання, здається, пов'язане з брандмауером. BTW - Дякую @Temnovit за команди усунення несправностей Mysql.

Я використовував netstat, щоб повідомити, що сервер працює і на правильному порту. Я також міг сказати, що мій сервер не приймає з'єднання на цьому порту за допомогою простої команди telnet.

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
telnet: connect to address 192.168.1.57: Connection refused
➜  ~ 

Після іншої корисної відповіді на команди брандмауера Fedora я міг відкрити правильні порти.

# On the server
sudo firewall-cmd --permanent --add-port=3306/tcp
sudo firewall-cmd --reload

Тоді моя команда telnet була успішною.

# On the remote machine
➜  ~ echo X | telnet -e X 192.168.1.57 3306
Telnet escape character is 'X'.
Trying 192.168.1.57...
Connected to 192.168.1.57.
Escape character is 'X'.

telnet> Connection closed.
➜  ~

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


0

Я mariadbвстановив. Сулюцій повинен був модифікувати bind-addressрозташований в/etc/mysql/mariadb.conf.d/50-server.cnf


-1

Рішення, описане внизу посилання, повинно вирішити вашу проблему http://www.debianhelp.co.uk/remotemysql.htm


2
bml13, цитування посилань на підтримку вашої відповіді - це відмінна практика, але ми віддаємо перевагу людям писати відповідь тут і додавати посилання, а не просто ставити посилання та залишати його при цьому.
MadHatter

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