Назад | Перейти на главную страницу

SQLSTATE [HY000] [1130] Хосту xx.xxx.x.xxx не разрешено подключаться к этому серверу MySQL.

У меня есть 2 сервера с digitalocean - веб-сервер (nginx) и сервер базы данных (mysql) - и я не могу получить подключение из Интернета к серверу mysql.

Из того, что я читал в других сообщениях SO по этой теме, ошибка, которую я получаю, является «хорошей», поскольку она показывает, что mysql пытается аутентифицировать соединение, и проблема, скорее всего, связана с пользователем mysql, в частности связанный с хостом или вариантом предоставления.

Вот mysql.user:

mysql> SELECT User,Host FROM mysql.user;

+-------+--------------+------------+
| User  | Host         | Grant_priv |
+-------+--------------+------------+
| root  | localhost    | Y          |
| root  | dev-db01     | Y          |
| root  | 127.0.0.1    | Y          |
| root  | ::1          | Y          |
|       | localhost    | N          |
|       | dev-db01     | N          |
| admin | %            | N          |
| admin | localhost    | N          |
| admin | xx.xxx.x.xxx | N          |
+-------+--------------+------------+

В некоторых руководствах указано, что удаленному пользователю нужен только ввод удаленного хоста, в других - подстановочный знак «%», а в других - «%» и localhost. Я бы предпочел не использовать хост с подстановочными знаками, а только внутренний IP-адрес веб-сервера xx.xxx.x.xxx. Как вы можете видеть выше, я пробовал все три, а до этого пробовал каждый по отдельности.

Я также предоставил администратору права root-like:

mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'xx.xxx.x.xxx' WITH GRANT OPTION;

mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'%' WITH GRANT OPTION;

mysql> GRANT ALL PRIVILEGES ON *.* TO 'admin'@'localhost' WITH GRANT OPTION;

mysql> FLUSH PRIVILEGES;

Я не совсем уверен, что должен означать столбец Grant_priv, в частности «Нет» против пользователя-администратора - означает ли это, что «WITH GRANT OPTION» не сработало? Даже в этом случае я бы не ожидал, что это помешает пользователю аутентифицироваться.

Я еще не настроил брандмауэр, поэтому могу telnet с веб-сервера на сервер mysql и подключаться до отказа:

telnet xx.xxx.x.xx 3306

Trying xx.xxx.x.xx...
Connected to xx.xxx.x.xx.
Escape character is '^]'.
EHost 'xx.xxx.x.xx' is not allowed to connect to this MySQL serverConnection closed by foreign host.

Моя цель - создать базу данных через удаленное соединение от веб-сервера к серверу mysql, используя доктрину как часть приложения Symfony. Вот соответствующая часть app / config / parameters.yml, если она вам нужна:

sudo vi app/config/parameters.yml
parameters:
database_driver:   pdo_mysql
database_host:     xx.xxx.x.xx
database_port:     3306
database_name:     appdatabasename
database_user:     admin
database_password: ~

Как видите, я оставил пароль пустым (~ интерпретируется как пустой), но также попытался ввести пароль (при обновлении пользователя admin в mysql с тем же паролем).

Детали настройки:

Я действительно смущен. Любые идеи?

Спасибо!

Вы пробовали обновить БД?

Вы можете использовать следующие команды, изменяя xx.xxx.x.xxx на IP-адрес сервера nginx, а заполнители для реальных значений:

mysql> update db set Host='xx.xxx.x.xxx' where Db='placeholder_db';
mysql> update user set Host='xx.xxx.x.xxx' where user='placeholder_user';