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

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

Настройка прослушивания

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

Чтобы включить эту настройку, откройте файл mysqld.cnf:

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

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

В некоторых версиях MySQL директива bind-address может отсутствовать в файле mysqld.cnf по умолчанию.

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

Если необходимо прослушивать только определенные сетевые интерфейсы, просто укажите IP адреса через запятую, к примеру

Настройка пользователя

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

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

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

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

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

Если вы планируете использовать эту базу данных с PHP-приложением - например, phpMyAdmin, - вам, возможно, захочется создать удаленного пользователя, который будет аутентифицироваться с помощью более старого, но все еще безопасного плагина mysql_native_password:

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

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

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

Затем вы можете выйти из клиента MySQL:

Настройка брандмауэра

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

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

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

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

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

Проверка подключения

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

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

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

Понравилась статья? Поделиться с друзьями:
Добавить комментарий