Разрешить удаленный доступ к базе данных MySQL

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

Чтобы сделать это, откройте mysqld.cnf файл:

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

или

$ sudo nano /etc/mysql/my.cnf

или

$ sudo nano /etc/my.cnf

Найдите строку, которая начинается с символа bind-address директива. Она будет выглядеть следующим образом:

# If MySQL is running as a replication slave, this should be
# changed. Ref https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_tmpdir
# tmpdir                = /tmp
#
# 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
mysqlx-bind-address     = 127.0.0.1

Это значение устанавливается в 127.0.0.1 по умолчанию, что означает, что сервер будет искать только локальные соединения. Эта директива должна быть изменена, чтобы ссылаться на внешний IP-адрес. Для устранения неполадок можно установить эту директиву на IP-адрес с подстановочным знаком, например * , : : , или 0.0.0.0:

# If MySQL is running as a replication slave, this should be
# changed. Ref https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_tmpdir
# tmpdir                = /tmp
#
# Instead of skip-networking the default is now to listen only on
# localhost which is more compatible and is not less secure.
bind-address            = 0.0.0.0

Сохраните и закройте файл после изменения этого параметра.

Затем перезапустите службу MySQL, чтобы применить изменения, внесенные в mysqld.cnf:

$ sudo systemctl restart mysql

Если у вас уже есть учетная запись пользователя MySQL, которую вы собираетесь использовать для подключения к базе данных с удаленного узла, вам необходимо перенастроить эту учетную запись на подключение с удаленного сервера, а не с localhost. Откройте клиент MySQL от имени пользователя root MySQL или другой привилегированной учетной записи:

$ sudo mysql

если у пользователя root есть пароль, используйте:

$ mysql -u root -p

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

mysql> CREATE USER 'bob'@'r_server_ip' IDENTIFIED BY 'password';

Или Чтобы изменить хост существующего пользователя, вы можете использовать MySQL’s RENAME USER команду. Выполните следующую команду:

mysql> RENAME USER 'bob'@'localhost' TO 'bob'@'r_server_ip';

Затем, с учетом ваших конкретных потребностей, назначьте новому пользователю соответствующие права. Следующий пример позволяет пользователю создавать, изменять и удалять базы данных, таблицы и пользователей, а также INSERT, UPDATE и DELETE данных из любой таблицы на сервере. Кроме того, пользователь может запрашивать данные с помощью SELECT, создавать внешние ключи с помощью ключевого слова REFERENCES и выполнять операции FLUSH с помощью разрешения RELOAD. Однако вы должны предоставлять людям только тот доступ, который им необходим, поэтому не стесняйтесь изменять привилегии своих пользователей по мере необходимости.

mysql> GRANT CREATE, ALTER, DROP, INSERT, UPDATE, DELETE, SELECT, REFERENCES, RELOAD on *.* TO 'bob'@'r_server_ip' WITH GRANT OPTION;

После этого неплохо бы выполнить команду FLUSH PRIVILEGES команда. Это освободит всю память, кэшированную сервером в результате выполнения предыдущей команды CREATE USER и ПОДРОБНЕЕ высказывания:

mysql> FLUSH PRIVILEGES;

После этого клиент MySQL можно закрыть:

mysql> exit;

Наконец, если на вашем сервере баз данных установлен брандмауэр, вы должны открыть порт 3306 — порт MySQL по умолчанию — для обеспечения связи с MySQL.

Если вы хотите подключаться к серверу базы данных только с одной машины, используйте следующую команду, чтобы предоставить этой машине эксклюзивные полномочия на удаленное подключение к базе данных. Заменить r_server_ip с реальным IP-адресом компьютера, к которому вы хотите подключиться:

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

UFW

$ sudo ufw allow from r_server_ip to any port 3306

Iptables

$ sudo iptables -A INPUT -p tcp -s r_server_ip --dport 3306 -j ACCEPT
$ sudo iptables-save

firewalld

$ sudo firewall-cmd --permanent --zone=public --add-port=3306/tcp

После этого попробуйте получить удаленный доступ к базе данных с другой машины:

Note: If you configured your firewall to only accept connections from a single IP address, you must attempt to access the database using the machine associated with that address.
$ mysql -u user -h db_server_ip -p

Если вы можете получить доступ к базе данных, это свидетельствует о том, что bind-address директива в вашем конфигурационном файле была источником проблемы. Однако установка bind-address на 0.0.0.0 небезопасен, так как позволяет подключаться к вашему серверу с любого IP-адреса.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *