Управление удаленным доступом к MySQL

Этот мануал является частью серии статей по устранению неполадок и диагностике настроек MySQL. Здесь мы рассмотрим некоторые общие проблемы, с которыми сталкиваются многие пользователи MySQL, и предоставим рекомендации по устранению конкретных ошибок. Также здесь вы найдете ссылки на другие мануалы и официальную документацию по MySQL, которые могут быть полезны в некоторых случаях.

Читайте также:

Очень часто веб-сервер и база данных приложения сначала находятся на одной машине. Однако со временем такая установка становится неэффективной, к тому же, ее сложно масштабировать. Как правило, в таких случаях базу данных переносят на отдельный сервер, что позволяет веб-серверу и БД расти своими темпами на индивидуальных машинах.

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

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

Найдите строку, которая начинается с bind-address:

. . .
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-адрес. В целях устранения неполадок можно указать подстановочный адрес: *, :: или 0.0.0.0:

. . .
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
. . .

Примечание: В MySQL 8+ директивы bind-address нет в файле 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 to 0.0.0.0 достаточно опасная, потому что она открывает доступ к вашим данным любому IP-адресу.

Если же вы все еще не можете получить удаленный доступ к БД, значит, проблема в чем-то другом.

В любом случае, возможно, вам пригодится мануал Настройка удаленной базы данных MySQL для оптимизации производительности сайта в Ubuntu 18.04. С его помощью вы сможете создать надежную конфигурацию удаленной базы данных.

Читайте также: Устранение сбоев в MySQL

Tags: