Page tree

По умолчанию сервер MySQL разрешает только локальные подключения, то есть выполняемые с сервера, на котором он работает.

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

  1. Внести изменения в конфигурационный файл MySQL.
  2. Разрешить пользователю или пользователям MySQL удаленные подключения.

Шаг 1. Редактирование конфигурационного файла

В Ubuntu файл размещается, как правило, по пути /etc/mysql/mysql.conf.d/mysqld.cnf.

В CentOS это могут быть /etc/mysql/my.cnf или /etc/my.cnf.

Откройте файл для редактирования, указав нужный путь:

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

Найдите в нем следующие строки:

# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address = 127.0.0.1

Параметр bind-address определяет, с каких адресов MySQL разрешает подключения. В данном случае оно возможно только с локального сервера (localhost, 127.0.0.1).

Укажите здесь нужные вам настройки:

  • Чтобы разрешить доступ с конкретного IP-адреса, укажите его вместо 127.0.0.1.
  • Чтобы разрешить доступ с любых IP-адресов, укажите здесь 0.0.0.0. Обратите внимание, что такая настройка может быть небезопасной. 

Закройте файл, сохранив изменения (в nano это можно сделать с помощью клавиш Crtl X → Y → Enter).

После перезапустите MySQL:

sudo systemctl restart mysql

Шаг 2. Создание пользователя MySQL

Все пользователи MySQL, имеющие доступ только к локальным подключениям, имеют учетную запись вида user@localhost. Чтобы разрешить пользователю подключаться удаленно, нужно добавить для него учетную запись user@нужный_IP (или user@%, тогда будет возможно подключение с любого IP).

Эту настройку можно выполнить через консоль или через phpMyAdmin.

Через консоль

Подключитесь к MySQL:

sudo mysql

С помощью команд ниже создайте пользователя и выдайте ему необходимые привилегии. В примере используется ALL PRIVILEGES, но в зависимости от ваших задач вы можете выдавать только отдельные права доступа (например, CREATE, INSERT, UPDATE и т.д.).

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

mysql> GRANT ALL PRIVILEGES ON имя_базы.* TO 'имя_пользователя'@'%' IDENTIFIED BY 'пароль';

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

mysql> GRANT ALL PRIVILEGES ON имя_базы.* TO 'имя_пользователя'@'123.45.67.8' IDENTIFIED BY 'пароль';

С помощью следующей команды можно разрешить пользователю подключение ко всем базам вместо одной конкретной:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'имя_пользователя'@'123.45.67.8' IDENTIFIED BY 'пароль';

Через phpMyAdmin

В phpMyAdmin перейдите в раздел "Учетные записи пользователей" -> "Добавить новую учетную запись".

В пункте "Имя хоста" выберите "Любой хост" и укажите либо %, чтобы разрешить подключение с любого адреса, либо конкретный IP.

На следующем шаге задайте нужные привилегии для пользователя. Это может быть полный набор прав или с определенными ограничениями (например, вы можете запретить новой учетной записи удалять таблицы базы данных; таким образом удаление будет возможно только при локальном подключении).

Ограничения файрвола

Удаленное подключение к MySQL может ограничиваться настройками файрвола. Например, на сервере с Bitrix 7 такое подключение вероятнее всего будет недоступно из-за ограничений iptables. Потребуется дополнительно внести изменения в правила — открыть порт 3306.

Можно открыть доступ к нему с любого адреса, но такая настройка является небезопасной. Рекомендуется разрешать доступ для конкретного IP.

В iptables это можно сделать командой:

sudo iptables -A INPUT -s 123.45.67.8 -p tcp --destination-port 3306 -j ACCEPT

Замените адрес из примера на нужный вам.

Если на сервере используется UFW, настройку можно выполнить с помощью:

sudo ufw allow from 123.45.67.8 to any port 3306


После завершения настройки проверьте, что пользователь может подключиться к MySQL удаленно. 

mysql -u имя_пользователя -h адрес_хоста_mysql -p
  • No labels