Як дозволити віддалене підключення до mysql


362

На моїй локальній машині я встановив MySQL Community Edition 5.5 і хочу дозволити віддалені з'єднання, щоб я міг підключитися із зовнішнього джерела.

Як я можу це зробити?



1
Якщо у вас трапляється використовувати DigitalOcean, ви можете спробувати використовувати sudo mysql_secure_installation. FYI.
Алан Донг

Не використовуйте форматування коду для тексту, який не є кодом. Не по темі.
Маркіз Лорнського

@EJP чому? чесне запитання з цікавості
Рене Рот

Відповіді:


776

Це дозволено за замовчуванням у MySQL.

Відключений доступ за замовчуванням - це віддалений rootдоступ. Якщо ви хочете включити це, запустіть цю команду SQL локально:

 GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
 FLUSH PRIVILEGES;

Потім знайдіть наступний рядок і прокоментуйте його у своєму my.cnfфайлі, який зазвичай працює /etc/mysql/my.cnfв системах Unix / OSX. У деяких випадках місце для файлу /etc/mysql/mysql.conf.d/mysqld.cnf).

Якщо це система Windows, ви можете знайти її в каталозі інсталяції MySQL, як правило, щось подібне C:\Program Files\MySQL\MySQL Server 5.5\ і буде ім'ям файлу my.ini.

Змінити лінію

 bind-address = 127.0.0.1

до

 #bind-address = 127.0.0.1

І перезапустіть сервер MySQL ( Unix / OSX та Windows ), щоб зміни вступили в силу.


4
Добре, тому я додав binnd-адресу = 127.0.0.1 в кінці файлу, і я намагався підключитися, використовуючи navicat від зовнішнього хоста, і я отримую помилку 10060
Лев

7
Гм, вам не потрібно його додавати. Як сказала моя відповідь, вам потрібно коментувати це, а не додавати. За замовчуванням там є один, тож вам потрібно буде це знайти і прокоментувати його,
профіксувавши

7
Хм, у \ MYsql Server 5.5 \ є лише 1 файл ini, який називається my-default.ini, і єдиний рядок без # - це: sql_mode = NO_ENGINE_SUBSTITUTION, STRICT_TRANS_TABLES
Лев

2
ця відповідь працює ідеально. thnx @mjuarez - НАДАЙТЕ ВСІ ПРИВИЛЕГИ . ДО "root" @ "%" ІДЕНТИФІКОВАНО "паролем" З ВАРІАНТМИ Гранта;
ядавр

66
Тим, хто шукає my.cnfфайл і не знаходить в ньому bind-addressдирективи, зауважте, що в моєму випадку (MySQL версія 14.14 на Ubuntu 16.04.2) місце для цього файлу було/etc/mysql/mysql.conf.d/mysqld.cnf
Ash Menon

49

Зробивши все вище, я все ще не міг увійти як rootвіддалений, але Telnetting до порту 3306підтвердив, що MySQLприймає з'єднання.

Я почав переглядати користувачів у MySQL і помітив, що є кілька користувачів root із різними паролями.

select user, host, password from mysql.user;

Отже, MySQLя знову встановив усі паролі для root і, нарешті, міг віддалено увійти як root.

use mysql;
update user set password=PASSWORD('NEWPASSWORD') where User='root';
flush privileges;

4
Це вірно. Виконуючи кроки в інших відповідях, схоже, створюються облікові записи користувачів з порожнім паролем. Тому вам потрібно додати паролі.
chhantyal

1
Мені потрібно було поєднати прийняту відповідь з цією, і тоді все працювало належним чином.
Джеймс

8
SQL для update user set authentication_string=password('YOUR_PASSWORD') where user='root';
версії

Прийнята відповідь встановлює пароль і працює для мене.
MikeKulls

1
Дякую, як і @James, мені довелося поєднувати це з прийнятою відповіддю, щоб виправити.
Бен Еверард

39

Лише замітка з мого досвіду, ви можете знайти конфігураційний файл під цим контуром /etc/mysql/mysql.conf.d/mysqld.cnf.

(Я деякий час боровся, щоб знайти цей шлях)


1
Це дуже залежить від того, який дистрибутив ви використовуєте. Найкращий спосіб - просто пошукати його:sudo find /etc -iname 'mysql*.cnf'
Мартін Конечний

Я ціную команду «знайти». Я новачок у командному рядку, тому це дуже корисно. Дякую!
Heres2u

Я боровся годинами редагуючи /etc/mysq/conf.d/mysql.cnf, поки я не визнав це невизначеним.
Гаян Кавіратне

26

У моєму випадку я намагався підключитися до віддаленого сервера mysql на ОС OS. Після проходження багатьох рішень (надання всіх привілеїв, видалення ip-прив’язок, включення в мережу) проблема все ще не вирішувалася.

Як виявилося, переглядаючи різні рішення, я натрапив на iptables, завдяки чому я зрозумів, що порт mysql 3306 не приймає з'єднання.

Ось невеличка примітка про те, як я перевірив і вирішив цю проблему.

  • Перевірка, чи порт приймає з'єднання:
telnet (сервер mysql ip) [portNo]
  • Додавання правила ip table, щоб дозволити з'єднання на порту:
iptables -A INPUT -i eth0 -p tcp -m tcp --portport 3306 -j ACCEPT
  • Не рекомендував би це для виробничого середовища, але якщо ваші iptables не налаштовані належним чином, додавання правил може все-таки вирішити проблему. У цьому випадку слід зробити наступне:
сервісні iptables зупиняються

Сподіваюсь, це допомагає.


17

Будь ласка, виконайте наведені нижче кроки, щоб встановити віддалений доступ до шаблону для користувача MySQL.

(1) Відкрити cmd.

(2) перейдіть до шляху C: \ Program Files \ MySQL \ MySQL Server 5.X \ bin та запустіть цю команду.

mysql -u корінь -p

(3) Введіть корінний пароль.

(4) Для надання дозволу виконайте таку команду.

НАДАЙТЕ ВСІ ПРИВІЛЕГИ НА *. * ДО "USERNAME" @ "IP" ІДЕНТИФІКОВАНО "ПАРОЛЬНИМ СЛОВОМ";

USERNAME: Ім'я користувача, яке ви хочете підключити до сервера MySQL.

IP: публічна IP-адреса, звідки ви хочете дозволити доступ до сервера MySQL.

ПАРОЛЬ: пароль використовуваного імені користувача.

IP можна замінити на%, щоб дозволити користувачеві підключитися з будь-якої IP адреси.

(5) Очистіть переваги, дотримуючись команди та виходу.

ПРИГОТОВЛЕННЯ ПРИМІТКИ;

вихід; або \ q

введіть тут опис зображення


3
Після цього моєму корінцю все ще заборонено доступ. Що я пропустив?
teapeng

Ви можете спробувати IP-адресу локальної системи замість% на 4-му кроці. Це має працювати. % означає будь-яку IP-адресу.
Хірен Паргі

6

Якщо ваш сервер MySQL прослуховує лише 127.0.0.1 або :: 1, тоді ви не зможете віддалено підключитися. Якщо у вас є bind-addressналаштування, /etc/my.cnfце може бути джерелом проблеми.

Вам також доведеться додати пільги і для некористувача localhost.


Дивно, як же ваш сервер може «слухати» ще й інший IP 127.0.0.1?
Pacerier

2
@Pacerier 127.0.0.1 прив'язаний лише до інтерфейсу зворотного зв'язку. Зовнішні з'єднання не працюватимуть. Система часто матиме декілька мережевих інтерфейсів, кожен з яких повинен бути прив’язаний конкретно, або ви можете використовувати bind-all 0.0.0.0 адресу.
тадман

6

Якщо ви встановили MySQL з brewнього, він дійсно слухає лише локальний інтерфейс за замовчуванням. Щоб виправити те, що вам потрібно відредагувати /usr/local/etc/my.cnfта змінити bind-addressз 127.0.0.1на *.

Потім бігайте brew services restart mysql.


1
Для мого сервера ubuntu 16.04.4 налаштування прив'язки-адреси знаходиться у /etc/mysql/mysql.conf.d/mysqld.cnf
Франк

Це не просто використання заварки, будь-який MySQL матиме це налаштування за замовчуванням, щоб дозволити лише локальні з'єднання.
nivs1978

6

Весь процес для віддаленого входу. Віддалений вхід за умовчанням вимкнено. Вам потрібно відкрити його вручну для всіх ip..для доступу до всіх ip

GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password';

Специфічний Ip

GRANT ALL PRIVILEGES ON *.* TO 'root'@'your_desire_ip' IDENTIFIED BY 'password';

тоді

flush privileges;

Ви можете перевірити свій хост і пароль користувача

SELECT host,user,authentication_string FROM mysql.user;

Тепер ваш обов’язок змінити це

bind-address = 127.0.0.1

Ви можете знайти це на

sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf

якщо ви цього не знайдете, то спробуйте це

sudo nano /etc/mysql/my.cnf

коментар у цьому

#bind-address = 127.0.0.1

Потім перезапустіть Mysql

sudo service mysql restart

Тепер насолоджуйтесь віддаленим входом у систему


3

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


Це звучить дуже специфічно для вашої ситуації. Я не безкінечне джерело знань про мережу, але ви впевнені, що це рішення добре стосується цієї проблеми?
Сенді Гіффорд

2
У мене теж було це питання. Спільне з хмарними серверами,
Matthew Lock,

2

Кому це потрібно, перевірте, чи відкритий порт брандмауера 3306, якщо служба брандмауера працює.



1

А для людей з OS X слід пам’ятати, що параметр bind-address зазвичай встановлюється у запущеному списку, а не у файлі my.ini. Тож у моєму випадку я зняв <string>--bind-address=127.0.0.1</string>з /Library/LaunchDaemons/homebrew.mxcl.mariadb.plist.


Альтернативне місце для файлу ~/Library/LaunchAgents
плістів

1

Якщо mysqldє прив'язка адреси набір до петлевий / локальну адресу (наприклад ,127.0.0.1 ), то сервер не буде доступний з віддалених хостів, так як інтерфейс зворотнього петлі не може бути досягнуто з будь-якого віддаленого хоста.

Установіть цей параметр на 0.0.0.0( ::для IPv4 + 6), щоб прийняти з'єднання з будь-якого хоста або до іншої зовнішньодоступної адреси, якщо ви хочете дозволити з'єднання лише на одному інтерфейсі.

Джерело


0

кілька разів потрібно використовувати ім'я ПК на Windows

перший крок) введіть файл налаштування mysql:

mysqld.cnf SET bind-address = 0.0.0.0

(дозволити повторне з'єднання через tcp / ip)

другий крок) зробити користувача в mysql, користувачів таблиці, з ім'ям ПК на Windows propierties, НЕ ip

введіть тут опис зображення


0

Увімкнення віддаленого кореневого доступу може бути небезпечним. Було б краще, якби ви створили облікові записи користувачів з більш обмеженими дозволами. Наступні три кроки повинні зробити це.

  1. Переконайтеся, що рядок, що починається з bind-address ..., принаймні коментується у вашому файлі my.ini або my.cnf. Якщо його немає, рухайтеся далі. Цей файл можна знайти в C:\ProgramData\MySQL\MySQL Server 8.0Windows.

  2. Після цього переконайтеся, що обліковий запис користувача, з яким ви встановлюєте зв’язок, не має localhost у полі Обмеження до хостів. Хоча це не рекомендується, ви можете замість цього поставити %це поле для тестування. Це можна зробити, відкривши локальне підключення до сервера за допомогою MySQL Workbench, потім перейдіть до сервера> Користувачі та привілеї на панелі меню та знайдіть обліковий запис користувача, з яким потрібно підключитися.

Поле "Ліміт узгодження хостів" - це те, що не дозволяє вам підключатися не локально. Тобто це обмежує прийняті з'єднання схемою IP-адрес. В ідеалі вам слід отримати доступ до сервера MySQL зі статичної IP-адреси або підмережі, щоб ви могли бути максимально обмежуючими.

  1. Очевидно, ваш брандмауер повинен дозволяти додатку MySQL Server спілкуватися через потрібний порт. Фізичне мережеве обладнання між вами та вашим сервером повинно забезпечувати зв'язок через порт, з яким ви хочете з'єднатися. (порт 3306, як правило)
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.