Помощь

Удаленное подключение к MySQL

По умолчанию сервер MySQL ограничивает подключения только к локальным адресам, то есть к тем, которые выполняются с того же сервера, на котором 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-адрес.
  • Для разрешения доступа с любых IP-адресов, установите значение 0.0.0.0. Однако, будьте осторожны, так как это может быть не безопасно.

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

Затем перезапустите службу MySQL:

sudo systemctl restart mysql

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

Все пользователи MySQL, имеющие доступ только с локальных подключений, имеют учетную запись вида user@localhost. Чтобы разрешить подключение пользователя к MySQL удаленно, необходимо создать учетную запись вида 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

Замените адрес 123.45.67.8 на необходимый вам.

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

sudo ufw allow from 123.45.67.8 to any port 3306

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

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

Остались вопросы - пишите