Віддалені підключення Mysql Ubuntu


95

З якоїсь причини мені не вдалося віддалено підключитися до мого сервера MySQL. Я спробував усе, і все ще отримую помилки

root@server1:/home/administrator# mysql -u monty -p -h www.ganganadores.cl
Enter password:
ERROR 1045 (28000): Access denied for user 'monty'@'server1.ganganadores.cl' (using password: YES)

Зараз я спробував бігати

 GRANT ALL ON *.* to monty@localhost IDENTIFIED BY 'XXXXX'; 
 GRANT ALL ON *.* to monty@'%' IDENTIFIED BY 'XXXXXX';` 

і досі нічого! Що я роблю неправильно?

EDIT : my.cnfпрокоментував bind ip.


яку версію MySQL ви використовуєте?
Стів

Версія сервера: 5.5.29-0ubuntu0.12.10.1 (Ubuntu)
Крістіан Едуардо Леуеде Ліон,

що повертає ця команда? ubuntu ~ $ sudo lsof -i -P | grep: 3306
апеса

Відповіді:


345

Щоб піддавати MySQL будь-чому, крім localhost, вам потрібно мати наступний рядок

Для MySQL версії 5.6 і нижче

не коментувати /etc/mysql/my.cnfі призначати вашим комп’ютерам IP-адресу, а не зворотний зв’язок

Для MySQL версії 5.7 і вище

не коментувати /etc/mysql/mysql.conf.d/mysqld.cnfі призначати вашим комп’ютерам IP-адресу, а не зворотний зв’язок

#Replace xxx with your IP Address 
bind-address        = xxx.xxx.xxx.xxx

Або додайте a, bind-address = 0.0.0.0якщо ви не хочете вказувати IP

Потім зупиніться та перезапустіть MySQL за допомогою нового запису my.cnf. Після запуску перейдіть до терміналу та введіть наступну команду.

lsof -i -P | grep :3306

Це повинно повернутися приблизно так із вашим фактичним IP-адресом у xxx

mysqld  1046  mysql  10u  IPv4  5203  0t0  TCP  xxx.xxx.xxx.xxx:3306 (LISTEN)

Якщо наведене вище твердження повернеться правильно, ви зможете приймати віддалених користувачів. Однак для того, щоб віддалений користувач підключався до правильних привілеїв, вам потрібно створити цього користувача як у localhost, так і в '%', як у.

CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypass';
CREATE USER 'myuser'@'%' IDENTIFIED BY 'mypass';

тоді,

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

і, нарешті,

FLUSH PRIVILEGES; 
EXIT;

Якщо у вас немає того самого користувача, створеного вище, при вході в систему локально ви можете успадкувати базові привілеї localhost і мати проблеми з доступом. Якщо ви хочете обмежити доступ, який має мій користувач, вам доведеться прочитати синтаксис оператора GRANT ТУТ. Якщо ви пройдете все це і все ще матимете проблеми, опублікуйте додаткові вихідні дані про помилки та відповідні рядки my.cnf.

ПРИМІТКА: Якщо lsof не повертається або не знайдений, ви можете встановити його ТУТ на основі вашого дистрибутива Linux. Вам не потрібно lsof, щоб все працювало, але це надзвичайно зручно, коли все працює не так, як очікувалося.


1
Дякую, хоч я вперше правильно виконав ці дії, я зробив їх ще раз, коли ви розмістили повідомлення і працювали як принада!
Крістіан Едуардо Леуеде Ліон

14
Для тих, хто бореться з цим lsof -i -P | grep :3306, що не працювало, але віддалене підключення все ще працює без цього підтвердження, не враховуйте, якщо ви не бачите належного виводу.
Mike S

@Mike Slutsky Дякую за нотатку, я відредагував свою відповідь. Ви можете встановити lsof, якщо він ще не встановлений.
апеса

2
FWIW у багатьох системах sudo lsof -i -Pбуде набагато кориснішим, ніж lsof -i -P(якщо припустити, що ви ввійшли як непривілейований користувач).
Ден Пассаро

2
lsof -i -P | grep :3306нічого не повертає!
Зелений

39

Додайте кілька балів на вершині чудового посту apesa:

1) Ви можете використовувати команду нижче, щоб перевірити ip-адресу, яку слухає сервер mysql

netstat -nlt | grep 3306

sample result:

tcp 0  0  xxx.xxx.xxx.xxx:3306  0.0.0.0:*   LISTEN

2) Використовуйте, FLUSH PRIVILEGESщоб змусити завантажувати таблиці доручень, якщо з якихось причин зміни набрали чинності не відразу

GRANT ALL ON *.* TO 'user'@'localhost' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
GRANT ALL ON *.* TO 'user'@'%' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
FLUSH PRIVILEGES; 
EXIT;

user == користувач u використовує для підключення до mysql ex.root
passwd == пароль, який використовує для підключення до mysql за допомогою

3) Якщо брандмауер netfilter увімкнено ( sudo ufw enable) на машині сервера MySQL, виконайте такі дії, щоб відкрити порт 3306 для віддаленого доступу:

sudo ufw allow 3306

перевірити статус за допомогою

sudo ufw status

4) Після встановлення віддаленого з'єднання його можна перевірити на клієнтському або серверному комп'ютері за допомогою команд

netstat -an | grep 3306
netstat -an | grep -i established

3
Це врятувало весь мій день! Дякую за sudo ufw status!!
Ріддхіман Адіб,

netstat -nlt | grep 3306повертається порожнім
Жоао Піментель Феррейра

@ João Pimentel Ferreira переконайтесь, що mysql працює першим, використовуйте команду "/etc/init.d/mysql status" для перевірки
Jonathan L

8

MySQL слухає лише localhost, якщо ми хочемо увімкнути віддалений доступ до нього, нам потрібно внести деякі зміни у файл my.cnf:

sudo nano /etc/mysql/my.cnf

Нам потрібно прокоментувати адреси прив'язки та пропустити зовнішні фіксуючі рядки:

#bind-address = 127.0.0.1
# skip-external-locking

Після внесення цих змін нам потрібно перезапустити службу mysql:

sudo service mysql restart

1
обов’язково коментуйтеskip-external-locking
calebeaires

1
Я не коментував функцію skip-external-locking, і вона все ще працює.
Марсія Онг

Мені довелося змінити це в /etc/mysql/mysql.conf.d
Бартандо

мій - це місце:sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
Лестер,

1

Якщо ви тестуєте на Windows, не забудьте відкрити порт 3306.


Ах, ти геній, це СУПЕР важливо, якщо ти використовуєш підсистему Windows для Linux, тобі потрібно відкрити порт 3306 для вхідного трафіку через брандмауер Windows, і жодна з наведених вище речей, щоб перевірити, чи працює MySQL з прослуховуванням підсистема
Брайан Лейшман

1

Ви використовуєте ubuntu 12 (досить старий)

Спочатку відкрийте файл /etc/mysql/mysql.conf.d/mysqld.cnf ( /etc/mysql/my.cnf в Ubuntu 14.04 та попередніх версіях

У розділі [mysqld] знайдіть рядок, bind-address = 127.0.0.1 І змініть його на, bind-address = 0.0.0.0 або прокоментуйте

Потім перезапустіть сервер Ubuntu MysQL systemctl restart mysql.service

Тепер Ubuntu Server дозволить віддалений доступ до сервера MySQL, але все ж вам потрібно налаштувати користувачів MySQL, щоб дозволити доступ з будь-якого хоста.

Користувач повинен мати 'username'@'%'усі необхідні гранти

Щоб переконатися, що сервер MySQL прослуховує всі інтерфейси, запустіть команду netstat наступним чином.

netstat -tulnp | grep mysql

Сподіваюся, це працює!

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