我遇到了这个奇怪的问题,我想知道是否有人遇到过这个问题。
我的网站架构由两台服务器组成:一台运行 Web 应用程序(Python/Django),另一台运行 MariaDB。
该网站已运行一年多了,并且非常稳定,但现在我遇到了这个奇怪的问题。
上周,Django 突然崩溃,因为它无法连接到服务器。我收到了包含以下错误日志的电子邮件:
_mysql_exceptions.OperationalError: (1045, "Access denied for user 'user'@'x.x.x.x' (using password: YES)")
对我来说,这显然是数据库问题,所以我做的第一件事就是重启运行 MariaDB 的服务器。之后,Web 应用可以连接到服务器,一切正常运行。
奇怪的是,表中的用户具有正确的 IP,该网站使用相同的凭据运行了近一年,重置后,它又开始工作了。
两天后,以及昨天,它再次发生,两次我都以相同的方式“修复”它。
错误日志是空的,我开始记录所有查询。在拒绝访问 Web 应用之前执行的最后一个查询中,我没有发现任何异常。
不幸的是,我找不到任何有类似问题的人...非常欢迎任何帮助!
数据库不小(10GB),有关系吗?
谢谢!!
答案1
他只是说没有记录任何错误。
我遇到过类似的情况,我在 Azure 中设置了一个复制组,每次重新启动 mariadb 服务之一时,复制用户都会突然在与其连接的从属服务器上收到“访问被拒绝”信息。我必须停止从属服务器,将所有从属线程设置为零,启动从属服务器,再次停止它,将从属线程设置为我之前设置的值,启动从属服务器,然后一切又恢复正常。只是停止和启动从属服务器不起作用。我通过更改主服务器命令完全重置了从属服务器上的复制,但一段时间后,这变得很麻烦。
这似乎是服务启动和 DNS 时的一些奇怪问题,但我不确定。我还没有追踪到它。
这只是一种 hack,但尝试一下也许会对你有用(我创建了一个 BASH 脚本来执行此操作,直到我找到问题所在)。此外,请确保已将所有内容设置为使用 IP 地址,而不是主机名(复制、CNF 设置,无论您在哪里使用它们)。尝试以不同的方式设置 skip_name_resolve。
顺便说一下,我使用的是 Ansible,部署方式与我之前在 GCE 和裸机上使用过的部署方式相同。没有理由采取不同的行动。