我有一个两部分的问题:
如果出现此错误,有没有办法查看主机是否接近被阻止?并发出警报?
PDOException: SQLSTATE[HY000] [1129] Host `hostname` is blocked because of many connection errors; unblock with `mysqladmin flush-hosts`
增加时应该遵循什么指导方针
max_connect_errors
——我们的指导方针是 10?是否建议mysqladmin flush-hosts
每天通过 cron 运行?
在 Red Hat 6 上运行 MySQL 5.5.13(企业版)。
实际上,您应该将max_connect_errors提高到默认值 10 之外。
范围是 1-18446744073709547520。我现在将其设置为 1000。
但是,你有一个更大的问题。mysqladmin要求您在执行任何操作之前连接到 mysqld。如果过快达到max_connect_errors ,那么此时您无法让mysqladmin执行任何操作。在这方面,即使是 cron 作业也会失败。
由于您使用的是 MySQL 5.5,因此最好的选择是在 MySQL 实例中创建一个计划事件,每 5 分钟触发一次,它只会做一件事:运行
FLUSH HOSTS
。我刚刚在我的 PC 上的 MySQL 5.5.12 中做了这个
太好了,没有来自 mysqld 的投诉。当然,我随意选择了5分钟。您可以选择您喜欢的任何时间表。
试试看 !!!
更新 2011-08-25 11:22 EDT
对于使用 5.1 之前的 MySQL 版本的每个人,我有一个有价值的建议:
编写一个保持打开连接的 perl 脚本,通过检索某些内容(即正常运行时间、aborted_connects 等)并每 10 分钟踢出 FLUSH HOSTS 来使其自身心跳。无论您以何种用户身份连接,请确保它具有 RELOAD 权限。
例如:运行以下命令:
这是我调用 heartbeat.pl 的 perl 脚本,使用该用户和密码执行此操作:
在操作系统中,每 6 秒调用一次 perl 脚本进行一次心跳。当它心跳 100 次,即 600 秒(10 分钟)时,让它运行
FLUSH HOSTS
。像这样称呼它:以下是其他时间表:
要停止程序,请运行以下命令: