По умолчанию сервер MySQL разрешает только локальные подключения, то есть выполняемые с сервера, на котором он работает.
Если же требуется подключаться к MySQL извне, со сторонних адресов, необходимо выполнить следующее:
В 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).
Укажите здесь нужные вам настройки:
Закройте файл, сохранив изменения (в nano это можно сделать с помощью клавиш Crtl X → Y → Enter).
После перезапустите MySQL:
sudo systemctl restart 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 перейдите в раздел «Учетные записи пользователей» -> «Добавить новую учетную запись».
В пункте «Имя хоста» выберите «Любой хост» и укажите либо %, чтобы разрешить подключение с любого адреса, либо конкретный 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