SQLSTATE[HY000] [1130] 主机 xx.xxx.x.xxx 不允许连接到此 MySQL 服务器

SQLSTATE[HY000] [1130] 主机 xx.xxx.x.xxx 不允许连接到此 MySQL 服务器

我有 2 台带有 digitalocean 的服务器 - Web(nginx)和数据库(mysql)服务器 - 并且无法从 Web 连接到 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          |
+-------+--------------+------------+

有些教程指出远程用户只需要输入远程主机,其他教程则需要输入通配符“%”,还有一些需要输入“%”和本地主机。我宁愿不使用通配符主机,而只使用 Web 服务器的内部 IP xx.xxx.x.xxx。如上所示,我已经尝试了所有三种方式,在此之前,我已经分别尝试了每一种方式。

我还授予管理员用户类似 root 的权限:

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 列的确切含义,特别是针对管理员用户的 No - 这是否意味着“WITH GRANT OPTION”不起作用?即便如此,我也不指望这会阻止用户进行身份验证。

我还没有设置防火墙,因此可以从 Web 服务器 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.

我的目标是使用 doctrine 作为 symfony 应用程序的一部分,通过从 web 服务器到 mysql 服务器的远程连接创建数据库。如果有帮助,以下是 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: ~

如您所见,我将密码留空(~ 被解释为空),但也尝试使用密码(同时使用相同的密码更新 mysql 中的管理员用户)。

设置详细信息:

  • VPS:DigitalOcean
  • MySQL 服务器版本:5.7
  • 操作系统:FreeBSD 10.1

我真的很困惑。有什么想法吗?

谢谢!

答案1

您是否尝试过更新数据库?

您可以使用以下命令将 xx.xxx.x.xxx 更改为 nginx 服务器的 IP,并将占位符更改为实际值:

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';

答案2

在 Google 中输入这个错误,我得到了第二个结果:

https://confluence.atlassian.com/jirakb/configuring-database-connection-results-in-error-host-xxxxxxx-is-not-allowed-to-connect-to-this-mysql-server-358908249.html

其中写道:

此错误是由于您的 MySQL 数据库当前使用的默认配置而发生的。此配置仅允许来自“localhost”的“root”用户进行连接,而不允许来自其他 IP 地址范围的连接。

它还提供了如何解决这个问题的说明。这似乎表明您尝试使用的用户受到 IP 限制。那里有很多说明,但由于版权问题,我并没有真正考虑在这里复制/粘贴整篇文章。

相关内容