Как разрешить удаленное подключение к MySQL

Я установил MySQL Community Edition 5.5 на свой локальный компьютер и хочу разрешить удаленные подключения, чтобы я мог подключаться из внешнего источника.

Как я могу это сделать?

19 ответов

Решение

Это разрешено по умолчанию в 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), чтобы изменения вступили в силу.

После всего вышеперечисленного я все еще не мог войти как 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;

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

(Я боролся в течение некоторого времени, чтобы найти этот путь)

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

Как оказалось, при поиске различных решений я наткнулся на iptables, который заставил меня понять, что порт mysql 3306 не принимает соединения.

Вот небольшая заметка о том, как я проверил и решил эту проблему.

  • Проверка, принимает ли порт соединения:
telnet (ip сервера mysql) [номер_порта]
  • Добавление правила таблицы ip для разрешения подключений к порту:
iptables -A INPUT -i eth0 -p tcp -m tcp --dport 3306 -j ПРИНЯТЬ
  • Не рекомендую это для производственной среды, но если ваши iptables не настроены должным образом, добавление правил может не решить проблему. В этом случае должно быть сделано следующее:
остановка сервиса iptables

Надеюсь это поможет.

Весь процесс для удаленного входа в систему. Удаленный вход по умолчанию отключен. Вам нужно открыть его вручную для всех 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

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

Пожалуйста, следуйте приведенным ниже инструкциям, чтобы установить удаленный доступ с подстановочными символами для MySQL User.

(1) Открыть cmd.

(2) перейдите к пути C:\Program Files\MySQL\MySQL Server 5.X\bin и выполните эту команду.

mysql -u root -p

(3) Введите пароль пользователя root.

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

ПРЕДОСТАВЛЯЙТЕ ВСЕ ПРИВИЛЕГИИ . НА "ИМЯ ПОЛЬЗОВАТЕЛЯ" @ "IP" ИДЕНТИФИЦИРУЕТ "ПАРОЛЬ";

USERNAME: имя пользователя, которое вы хотите подключить к серверу MySQL.

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

ПАРОЛЬ: пароль от имени пользователя.

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

(5) Сбросьте предпочтения с помощью следующей команды и выйдите.

ПРИВИЛЕГИИ ПРОМЫВКИ;

выход;

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

Закрыть комментарий по ссылке /etc/mysql/mysql.conf.d/mysqld.cnf или /etc/mysql/my.cnf:

      bind-address = 127.0.0.1  =>>  #bind-address = 127.0.0.1

Измените имя хоста, чтобы все машины могли получить к нему доступ, запустите эту команду SQL локально:

      UPDATE mysql.user SET Host='%' WHERE Host='localhost' AND User='root';
FLUSH PRIVILEGES;

Перезапустить службу:

      sudo service mysql restart

Откройте порт mysql:

      sudo ufw allow 3306

Мне пришлось столкнуться с этой проблемой, когда я работал над Java-проектом с сервером MySQL в качестве базы данных.

Вот как я это сделал:

Во-первых, убедитесь, что конфигурация вашего сервера MySQL допускает удаленные подключения. Используйте предпочитаемый вами текстовый редактор, чтобы открыть файл конфигурации сервера MySQL:

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

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

После внесения необходимых изменений сохраните файл конфигурации и выйдите из него. Примените изменения, внесенные в файл конфигурации MySQL, перезапустив службу MySQL:

sudo systemctl restart mysql

Затем войдите в консоль сервера MySQL на сервере, на котором он был установлен:

mysql -u root -p

Введите свой пароль пользователя mysql

Проверьте хосты, к которым у желаемого пользователя уже есть доступ. В моем случае пользователь root:

SELECT host FROM mysql.user WHERE user = "root";

Это дало мне такой результат:

+-----------+
| host      |
+-----------+
| localhost |
+-----------+

Затем я выполнил команду ниже, чтобы предоставить root удаленный доступ пользователя к базе данных с именем my_database:

USE my_database;
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'my-password';

Примечание: %предоставляет пользователю удаленный доступ со всех хостов в сети. Вы можете указать IP-адрес отдельных хостов, к которым вы хотите предоставить пользователю доступ, с помощью команды - GRANT ALL PRIVILEGES ON *.* TO 'root'@'Ip-Address' IDENTIFIED BY 'my-password';

После чего я проверил хосты, к которым у пользователя теперь есть доступ. В моем случае пользователь root:

SELECT host FROM mysql.user WHERE user = "root";

Это дало мне такой результат:

+-----------+
| host      |
+-----------+
| %         |
| localhost |
+-----------+

Наконец, вы можете попробовать подключиться к серверу MySQL с другого сервера, используя команду:

mysql -u username -h mysql-server-ip-address -p

Где u представляет пользователя, h представляет собой mysql-server-ip-адрес, а p представляет пароль. Так что в моем случае это было:

mysql -u root -h 34.69.261.158 -p

Введите свой пароль пользователя mysql

Вы должны получить этот вывод в зависимости от версии вашего сервера MySQL:

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.31 MySQL Community Server (GPL)

Copyright (c) 2000, 2020, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

Ресурсы: как разрешить удаленные подключения к MySQL

Это все.

надеюсь, это поможет

Если ваш серверный процесс MySQL прослушивает только 127.0.0.1 или::1, вы не сможете подключиться удаленно. Если у тебя есть bind-address установка в /etc/my.cnf это может быть источником проблемы.

Вы также должны будете добавить привилегии дляlocalhost пользователь также.

Если вы установили MySQL из brew он действительно слушает только локальный интерфейс по умолчанию. Чтобы исправить это вам нужно отредактировать /usr/local/etc/my.cnf и изменить bind-address от 127.0.0.1 в *,

Тогда беги brew services restart mysql,

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

Для тех, кому это нужно, проверьте, открыт ли порт брандмауэра 3306, если ваша служба брандмауэра работает.

Если mysqld имеет адрес привязки, установленный на петлевой / локальный адрес (например, 127.0.0.1), сервер не будет доступен с удаленных хостов, поскольку петлевой интерфейс не доступен с любого удаленного хоста.

Установите эту опцию на 0.0.0.0 (:: для IPv4+6) принимать подключения от любого хоста или к другому внешне достижимому адресу, если вы хотите разрешить соединения только на одном интерфейсе.

Источник

Этот блог Как настроить сервер MySQL в локальной сети, будет полезен при настройке MySQL с нуля

MySQL 8 больше не позволяет создавать пользователя с помощью команды GRANT. Сначала нужно создать пользователя.

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

Включение удаленного корневого доступа может быть опасным. Было бы предпочтительнее, если бы вы настраивали учетные записи пользователей с более ограниченными разрешениями. Следующие три шага должны сделать это.

  1. Убедитесь, что строка, начинающаяся с bind-address ...как минимум закомментирован в вашем файле my.ini или my.cnf. Если его нет, двигайтесь дальше. Вы можете найти этот файл вC:\ProgramData\MySQL\MySQL Server 8.0 в Windows.

  2. После этого убедитесь, что в учетной записи пользователя, с которой вы устанавливаете соединение, нет localhostв поле Ограничение сопоставления хостов. Хотя это не рекомендуется, вы можете вместо этого поставить%в этой области для целей тестирования. Вы можете сделать это, открыв локальное соединение с сервером с помощью MySQL Workbench, затем выбрав Сервер> Пользователи и привилегии в строке меню и найдя учетную запись пользователя, с которой вы хотите подключиться.

Поле "Ограничение сопоставления хостов" - это то, что запрещает вам подключаться нелокально. Т.е. он ограничивает принимаемые подключения набором IP-адресов. В идеале вы должны получать доступ к серверу MySQL со статического IP-адреса или подсети, чтобы вы могли использовать как можно более строгие ограничения.

  1. Очевидно, ваш брандмауэр должен позволять приложению MySQL Server связываться через нужный вам порт. Физическое сетевое оборудование между вами и вашим сервером должно обеспечивать связь через порт, к которому вы хотите подключиться. (обычно порт 3306)

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

Иногда нужно использовать имя компьютера в Windows

первый шаг) поместите в конфигурационный файл mysql:

mysqld.cnf УСТАНОВИТЬ адрес привязки = 0.0.0.0

(чтобы разрешить соединение через TCP / IP)

второй шаг) сделать пользователя в mysql, таблицу пользователей, с именем ПК в свойствах Windows, а не ip

  • Проверьте разрешение на предоставление удаленному серверу доступа к порту 3306 с подстановочными знаками:

судо lsof -i -P -n | grep СЛУШАТЬ

НЕ должно быть так:

mysqld 23083 mysql 21u IPv4 145900142 0t0 TCP 127.0.0.1:3306 (СЛУШАТЬ)

В этом случае нам нужно обновить /etc/mysql/mysql.conf.d/mysqld.cnf или /etc/mysql/mariadb.conf.d/50-server.cnf с помощью:

адрес привязки = 127.0.0.1 --> 0.0.0.0

А затем перезапустите mysql "sudo service mysql restart"

Чтобы проверить соединение mySQL с клиента:

nc -vz <host_address> 3306

Другие вопросы по тегам