【问题标题】:Error 1129: Host '' blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'错误 1129:主机 '' 由于许多连接错误而被阻止;使用 'mysqladmin flush-hosts' 解除阻塞
【发布时间】:2023-03-12 10:41:01
【问题描述】:

当我运行一个连接到 mysql 的 python 代码时,我看到了这个错误; “错误 1129:主机 '' 由于许多连接错误而被阻止;使用 'mysqladmin flush-hosts' 解除阻止”。

这是我尝试过的: 我增加了 max_connection_errors 值,并且还执行了“刷新主机”命令。我还检查了mysql日志,但没有。另外,我检查了网络连接,也没有问题。

$netstat -an | grep 3306 tcp 0 0 0.0.0.0:3306 0.0.0.0:* 听

这里是mysql设置:

mysql> 显示变量,如 '%error%';

error_count | 0
日志错误 | /var/log/mysql/error.log 最大连接错误 | 4294967295
最大错误计数 | 64
slave_skip_errors |关闭

mysql> 显示变量,例如 '%max_connections%';

最大连接数 | 5000

mysql> 显示类似 '%onn%' 的状态;

Aborted_connects | 6
连接 | 4802
Max_used_connections | 26
SSL_client_connects | 0
ssl_connect_renegotiates | 0
ssl_finished_connects | 0
Threads_connected | 1

mysql>'SHOW STATUS WHERE variable_name LIKE "Threads_%" OR variable_name = "Connections

连接 | 4996
线程缓存 | 7
Threads_connected | 1
Threads_created | 1950
线程运行 | 1

mysql> 显示进程列表;

4800 |根 |本地主机 |空 |查询 | 0 |空 |显示进程列表
4807 |根 |本地主机 | db1 |睡眠 | 0 | |空

谁能帮我找出问题所在以及解决方法是什么?

【问题讨论】:

  • 你应该在dba.stackexchange.com问这个
  • @BK435 Python和mysql在同一个服务器。
  • 另外,当我运行代码时,立即生成了mysql错误。该代码甚至没有失败,也没有产生任何错误。我还检查了 /var/log,没有失败也没有错误。

标签: mysql sql security database-administration


【解决方案1】:

这不是您的 MySQL 服务器软件的故障。这是在您用来运行 python 程序的同一台机器上运行的其他一些软件出现故障的证据。错误 1129 意味着 MySQL 的粗略反网络犯罪功能已被激活:在您使用的同一台机器上运行的程序已尝试连接多次但失败(默认为 100 次)。当这种情况发生时,MySQL 会断定这台机器被入侵(或运行异常)并拒绝接受来自它的任何更多连接。

什么可能导致这种情况?你的机器上是否有一个 cronjob 或其他自动运行的程序被安装了无效的用户名或密码?如果是这样,它可能会在 MySQL 服务器上造成连接失败。

如果它是基于 Linux 或 BSD 的机器,请多次使用 ps axuww shell 命令并查找您不认识的进程。 (如果您不确定如何执行此操作,请在论坛上询问您的操作系统。)

您可以考虑重新启动机器。

编辑您的机器似乎受到攻击。你提到你在你的 authlog 中收到了很多 failed password 消息。你能找到这些攻击的来源吗?如果它们是内部的——也就是说,来自你或你的同事控制的机器——它们可能是某种已配置的程序

  • 运行过于频繁,或
  • 使用不正确的密码,
  • 或两者兼有。

在 IP 地址中查找模式。这些故障是来自一个还是少数几个地址?它们是来自 192.168.. 或 10...* 等私有地址,还是来自 localhost (127.0.0.1)?还是他们来自各地?如果您不认识这些地址,请尝试将它们放入以下三个网站的表单中:

https://ripe.net
https://apnic.net
https://arin.net

这三个中至少有一个会告诉您失败的国家和电信提供商。如果他们来自与你没有任何关系的地方,你就会受到攻击。

如果攻击是外部的,您需要在它们到达您的数据库计算机之前采取措施阻止它们。大多数运行 MySQL 的机器都通过防火墙与更广泛的互联网隔离,因为 MySQL 在抵御网络犯罪和脚本小子攻击方面不如其他一些软件那么强大。

寻找时间模式。这些故障的计时是每五分钟一次,还是尽可能快,还是什么?如果它是正常的,那么您可能在某个地方有某种行为不端的程序。

如果这些对您来说都没有意义,请网络工程师帮助您。如果您的 MySQL 服务器保存敏感或有价值的信息,不要拖延解决这个问题。祝你好运。这种事情已经毁了我好几天。

【讨论】:

  • 感谢@Ollie Jones。我检查了 /var/log/authlog,我看到很多“来自 的 root 密码失败”和来自所有不同 IP 地址的“身份验证失败”。也许这将是错误 1129 的原因。我也重新启动了机器,但我看到了同样的错误。我接下来应该采取什么行动?可以不接可疑的ip地址连接吗?
  • @BK435,你上面提到我应该允许远程连接。但是我没有设置跳过网络,而是默认设置为仅在 localhost 上侦听,这更兼容且安全性不低。由于许多连接错误,主机“X”中的主机“X”被阻止是 localhost DNS。
  • 你是我的天使,@Ollie Jones!非常感谢。我注意到有很多可疑的连接失败,例如“sshd[3040]: Failed password for root from..”或“sshd[8726]: pam_unix(sshd:auth): authentication failure; logname="。我安装了fail2ban,它已经禁止了许多IP地址。但即使在此之后,当我运行 python 代码时,我仍然看到相同的错误,“Host '' 由于许多连接错误而被阻止;使用 'mysqladmin flush-hosts' 解除阻止”。我重新启动了 mysql 并重新启动了服务器,但这是同样的错误。我们这里没有网络工程师,我真的迷路了。请帮帮我。
【解决方案2】:

客户端必须在同一时间范围内遇到许多连接请求。 重置解决方案通过运行命令mysqladmin flush-hosts从阻止列表中删除主机IP

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-04-19
    • 2017-06-01
    • 2018-02-13
    • 1970-01-01
    • 2014-04-12
    • 2012-11-21
    • 1970-01-01
    相关资源
    最近更新 更多