Удаленное подключение к MySQL
По умолчанию сервер MySQL ограничивает подключения только к локальным адресам, то есть к тем, которые выполняются с того же сервера, на котором MySQL работает.
Однако, если вам требуется устанавливать удаленные подключения к MySQL из внешних сетей, то вам необходимо выполнить следующие шаги:
- Внести изменения в конфигурационный файл MySQL.
- Разрешить пользователям 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