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

Note

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

Одна из наиболее распространенных проблем, с которыми сталкиваются пользователи при настройке удаленной базы данных MySQL, заключается в том, что их экземпляр MySQL настроен только на прослушивание локальных соединений. Это настройка MySQL по умолчанию, но она не сработает для настройки удаленной базы данных, поскольку MySQL должен иметь возможность прослушивать IP-адресexternal, по которому можно связаться с сервером. Чтобы включить это, откройте файлmysqld.cnf:

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

Перейдите к строке, которая начинается с директивыbind-address. Это будет выглядеть так:

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

. . .
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# 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
. . .

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

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

. . .
lc-messages-dir = /usr/share/mysql
skip-external-locking
#
# 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
. . .

[.Примечание]##

Note: Если вы используете MySQL 8+, директивыbind-address по умолчанию не будет в файлеmysqld.cnf. В этом случае добавьте следующую выделенную строку в конец файла:

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

. . .
[mysqld]
pid-file        = /var/run/mysqld/mysqld.pid
socket          = /var/run/mysqld/mysqld.sock
datadir         = /var/lib/mysql
log-error       = /var/log/mysql/error.log
bind-address            = 0.0.0.0

После изменения этой строки сохраните и закройте файл, а затем перезапустите службу MySQL:

sudo systemctl restart mysql

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

mysql -u user -h database_server_ip -p

Если вы можете получить доступ к своей базе данных, это означает, что проблема была в директивеbind-address в вашем файле конфигурации. Однако обратите внимание, что установкаbind-address на0.0.0.0 небезопасна, поскольку позволяет подключаться к вашему серверу с любого IP-адреса. С другой стороны, если вы все еще не можете получить доступ к базе данных удаленно, проблема может быть связана с чем-то другим. В любом случае вам может быть полезно следовать нашему руководству поHow To Set Up a Remote Database to Optimize Site Performance with MySQL on Ubuntu 18.04, чтобы настроить более безопасную конфигурацию удаленной базы данных.

Related