
Чтобы сделать это, откройте 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-адреса.