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

Как разрешить удаленные подключения к серверу базы данных MySQL

По умолчанию сервер MySQL прослушивает соединения только с localhost, что означает, что к нему могут получить доступ только приложения, работающие на том же хосте.

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

В этом руководстве мы рассмотрим шаги, необходимые для разрешения удаленных подключений к серверу MySQL. Те же инструкции применимы и для MariaDB.

Настройка сервера MySQL

Первый шаг — настроить сервер MySQL на прослушивание определенного IP-адреса или всех IP-адресов на машине.

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

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

Расположение файла конфигурации MySQL отличается в зависимости от дистрибутива. В Ubuntu и Debian файл находится по адресу /etc/mysql/mysql.conf.d/mysqld.cnf , а в дистрибутивах на основе Red Hat, таких как CentOS, файл находится по адресу /etc/my.cnf .

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

Найдите строку, которая начинается с bind-address и установите ее значение равным IP-адресу, который сервер MySQL должен прослушивать.

По умолчанию установлено значение 127.0.0.1 (прослушивается только на localhost).

В этом примере мы настроим сервер MySQL для прослушивания всех интерфейсов IPv4, изменив значение на 0.0.0.0

bind-address = 0.0.0.0 # skip-networking 

Если есть строка, содержащая skip-networking , удалите ее или закомментируйте, добавив # в начале строки.

В MySQL 8.0 и выше директива bind-address может отсутствовать. В этом случае добавьте его в раздел [mysqld] .

После этого перезапустите службу MySQL, чтобы изменения вступили в силу. Только root или пользователи с привилегиями sudo могут перезапускать службы.

Читайте также:  Vnc server tiger linux

Чтобы перезапустить службу MySQL в Debian или Ubuntu, введите:

sudo systemctl restart mysql

В дистрибутивах на основе RedHat, таких как CentOS, для перезапуска службы выполните:

sudo systemctl restart mysqld

Предоставление доступа пользователю с удаленного компьютера

Следующим шагом будет разрешение доступа к базе данных удаленному пользователю.

Войдите на сервер MySQL как пользователь root, набрав:

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

Изнутри оболочки MySQL используйте оператор GRANT чтобы предоставить доступ удаленному пользователю.

GRANT ALL ON database_name.* TO user_name@'ip_address' IDENTIFIED BY 'user_password';
  • database_name — это имя базы данных, к которой будет подключаться пользователь.
  • user_name — это имя пользователя MySQL.
  • ip_address — это IP-адрес, с которого пользователь будет подключаться. Используйте % чтобы разрешить пользователю подключаться с любого IP-адреса.
  • user_password — пароль пользователя.

Например, чтобы предоставить доступ к базе данных dbname пользователю с именем foo с паролем my_passwd с клиентского компьютера с IP 10.8.0.5 , вы должны запустить:

GRANT ALL ON dbname.* TO foo@'10.8.0.5' IDENTIFIED BY 'my_passwd';

Настройка межсетевого экрана

Последний шаг — настроить брандмауэр, чтобы разрешить трафик на порт 3306 (порт по умолчанию MySQL) с удаленных машин.

Iptables

Если вы используете iptables в качестве брандмауэра, приведенная ниже команда разрешит доступ с любого IP-адреса в Интернете к порту MySQL. Это очень небезопасно.

sudo iptables -A INPUT -p tcp --destination-port 3306 -j ACCEPT

Разрешить доступ с определенного IP-адреса:

sudo iptables -A INPUT -s 10.8.0.5 -p tcp --destination-port 3306 -j ACCEPT

UFW

UFW — это брандмауэр по умолчанию в Ubuntu. Чтобы разрешить доступ с любого IP-адреса в Интернете (очень небезопасно), запустите:

Разрешить доступ с определенного IP-адреса:

sudo ufw allow from 10.8.0.5 to any port 3306

БрандмауэрD

FirewallD — это инструмент управления брандмауэром по умолчанию в CentOS. Чтобы разрешить доступ с любого IP-адреса в Интернете (очень небезопасно), введите:

sudo firewall-cmd --permanent --zone=public --add-port=3306/tcpsudo firewall-cmd --reload

Чтобы разрешить доступ с определенного IP-адреса через определенный порт, вы можете создать новую зону FirewallD или использовать расширенное правило. Итак, создайте новую зону с именем mysqlzone :

sudo firewall-cmd --new-zone=mysqlzone --permanentsudo firewall-cmd --reloadsudo firewall-cmd --permanent --zone=mysqlzone --add-source=10.8.0.5/32sudo firewall-cmd --permanent --zone=mysqlzone --add-port=3306/tcpsudo firewall-cmd --reload

Проверка изменений

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

mysql -u user_name -h mysql_server_ip -p

Где user_name — это имя пользователя, mysql_server_ip вы предоставили доступ, а mysql_server_ip — это IP-адрес хоста, на котором работает сервер MySQL.

Читайте также:  Linux какая видеокарта активна

Если все настроено правильно, вы сможете войти на удаленный сервер MySQL.

Если вы получаете сообщение об ошибке, подобное приведенному ниже, то либо порт 3306 не открыт , либо сервер MySQL не прослушивает IP-адрес .

ERROR 2003 (HY000): Can't connect to MySQL server on '10.8.0.5' (111)" 

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

"ERROR 1130 (HY000): Host ‘10.8.0.5’ is not allowed to connect to this MySQL server" 

Выводы

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

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

  1. Настройте сервер MySQL для прослушивания всего или определенного интерфейса.
  2. Разрешите доступ удаленному пользователю.
  3. Откройте порт MySQL в вашем брандмауэре.

Если у вас есть вопросы, не стесняйтесь оставлять комментарии ниже.

Источник

How to Allow Remote Access to MySQL Database Server

The software ecosystem is not new to the notion of distributed systems. You do not need to be physically present in order to interact with your remotely hosted software.

Therefore your MySQL does not need to reside on a local machine for you to fully benefit from its functional features. You can now have the MySQL running on a remote dedicated server and still be guaranteed the same database security and performance as the case with a MySQL running on a local/desktop machine.

This article guide will walk us through setting up and enabling remote access to a MySQL server in Linux. On the remote server/machine hosting your MySQL database software, we need to perform a few configuration steps for it to allow authenticated remote users access.

Create a New MySQL User

It is advisable to work with a remote user who is neither a root MySQL user nor tied to the remote server hosting the MySQL database software.

Access your remote MySQL server and database via SSH.

Connect to MySQL Database

To create a new MySQL user, we will adhere to the command syntax:

CREATE USER 'username'@'%' IDENTIFIED BY 'your_user_password';

As you have noted, we are using the notation ‘username’@’%’ and not ‘username’@’localhost’ since we want this user to be dynamic enough to access the MySQL server from any other host machine with a different IP address.

mysql> CREATE USER 'remote_user'@'%' IDENTIFIED BY 'password1122';

Let us grant this user some database privileges. For instance, this user can have the same database privileges as the root user only that the root user is bound to the host machine.

mysql> GRANT ALL PRIVILEGES ON *.* TO 'remote_user'@'%'; mysql> FLUSH PRIVILEGES; mysql> exit;

Create New MySQL User

Enable Remote MySQL Access

Now that we have the remote user created, it’s time to perform some additional configuration changes. By default, the MySQL bind-address is 127.0.0.1 which implies that only localhost users can interact with the MySQL database.

Читайте также:  Arch linux intel hd graphics driver

To give access to other users’ IP addresses to your database server, navigate and open the file MySQL configuration file.

$ sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf OR $ sudo vi /etc/my.cnf

To allow remote access to your MySQL database server, the fields bind-address and mysqlx-bind-address need to be commented out. These configuration changes will prevent the server hosting MySQL database software from only relying on localhost (127.0.0.1) connections. Afterward, any IP address will be allowed to access it.

Enable MySQL Remote Access

Restart Your MySQL server and then identify the IP address of the MySQL server.

$ sudo systemctl restart mysql $ ifconfig

Find Linux Server IP Address

Attempting Remote MySQL Database Access

To directly connect to the MySQL database server remotely, adhere to the following MySQL syntax:

$ mysql -u username -h mysql_server_ip_adress -p

In our case, the command will look like the following:

$ mysql -u remote_user -h 192.168.50.130 -p

Access Remote MySQL Database

If you run into the above error as depicted by the screen capture, you will need to configure your MySQL user to use a native password. Sign-in back to your MySQL server via SSH and implement the command:

mysql> ALTER USER 'remote_user'@'%' IDENTIFIED WITH mysql_native_password BY 'password1122'; mysql> exit;

Afterward, exit the MySQL database shell and restart the MySQL daemon.

$ sudo systemctl restart mysql

Configure MySQL Native Password

Re-attempt remote access to your MySQL server.

$ mysql -u remote_user -h 192.168.50.130 -p

Connect to Remote MySQL Database

And just like that, you can directly and remotely gain access to a MySQL database server from a remote client computer configured to an IP address of your choice.

Enable Remote MySQL Access in Firewall

If you have a firewall enabled on your remote server, you might need to grant access to MySQL’s default port 3306 and grant access to remote_ip_address as shown.

UFW Firewall

$ sudo ufw allow from remote_ip_address to any port 3306

FirewallD

$ sudo firewall-cmd --new-zone=mysqlrule --permanent $ sudo firewall-cmd --reload $ sudo firewall-cmd --permanent --zone=mysqlrule --add-source=remote_ip_address $ sudo firewall-cmd --permanent --zone=mysqlrule --add-port=3306/tcp $ sudo firewall-cmd --reload

Iptables

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

That’s all! In this article, you have learned helpful insight into the common ideas of remote MySQL access in Linux.

Источник

Оцените статью
Adblock
detector