周末突然接到公司线上有个小项目出了问题。查看日志是数据库上面的错误。
ERROR 1129 (HY000): Host 'xx.xx.xx.xx' is blocked because of many connection errors; unblock with 'mysqladmin flush-hosts'
因为错误连接次数过多导致数据库保护阻塞,这个配置的默认值是10.
查看程序的错误日志,没有任何异常,这种连接错误,肯定不是程序既有程序上面的问题。
因为服务器是禁止外网直接连接的,只能服务器的内网连接。当时外包为了连接数据库,做了一个nginx的反向代理,代理到数据库服务器的3306。
查看nginx日志,发现在数据库异常之前,有某个IP频繁的请求这个代理端口。初步推断是有人扫描爆破。
根本上解决问题非常简单,直接移除这个代理,通过ssh,或者白名单方式访问连接。
下面是治标不治本的方法:
max_connect_errors = 1000