SQLSTATE [HY000] [1130] O host xx.xxx.x.xxx não tem permissão para se conectar a este servidor MySQL

2

Eu tenho 2 servidores com servidores digitalocean - web (nginx) e database (mysql) - e não consigo conexão da web para o servidor mysql.

Pelo que eu li em outras postagens SO sobre o tópico, o erro que estou recebendo é 'bom' pois mostra que o mysql está tentando autenticar a conexão, e o problema é muito provavelmente relacionado ao usuário mysql , em particular a opção de hospedagem ou concessão relacionada.

Aqui está o 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          |
+-------+--------------+------------+

Alguns tutoriais afirmam que o usuário remoto precisa apenas do host remoto inserido, outros o caractere curinga '%' e outros '%' e localhost. Eu prefiro não usar um host curinga, mas apenas o IP interno do servidor web xx.xxx.x.xxx. Como você pode ver acima, eu tentei todos os três, e antes disso, eu tentei cada um separadamente.

Eu também concedeu privilégios de root do usuário administrador com:

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;

Não sei exatamente o que a coluna Grant_priv deve significar, em particular o No contra o usuário admin - isso significa 'WITH GRANT OPTION' não funcionou? Mesmo assim, eu não esperaria que isso impedisse o usuário de se autenticar.

Eu ainda não configurei um firewall, então posso fazer telnet do servidor web para o servidor mysql e conectar antes de ser rejeitado:

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.

Meu objetivo é criar um banco de dados através da conexão remota do servidor web para o servidor mysql usando doutrina como parte de um aplicativo symfony. Aqui está a parte relevante do app / config / parameters.yml se for útil:

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: ~

Como você pode ver, deixei a senha vazia (~ é interpretada como vazia), mas também tentei com uma senha (ao atualizar o usuário admin no mysql com a mesma senha).

Detalhes da configuração:

  • VPS: DigitalOcean
  • Servidor MySQL Ver: 5.7
  • SO: FreeBSD 10.1

Estou muito confuso. Alguma idéia?

Obrigado!

    
por Server Admin 03.02.2016 / 00:28

1 resposta

0

Você já tentou atualizar o banco de dados?

Você pode usar os seguintes comandos alterando xx.xxx.x.xxx para o IP do servidor nginx e os espaços reservados para os valores reais:

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';
    
por 03.02.2016 / 02:21