Host XXX is blocked because of many connection errors, unblock with 'mysqladmin flush-hosts

nginx反向代理mysql的配置如下:

 upstream  mysql_server {
    server  172.18.3.243:3306;

    #check interval=3000 rise=2 fall=5 timeout=1000;
     }

server {
    listen       3305;
    server_name localhost;
    access_log  logs/access.log;
    proxy_pass mysql_server;
    so_keepalive on;
    tcp_nodelay on;
       }

配置完成nginx 发现代理mysql后,发现连接连接mysql经常报错,Host XXX is blocked because of many connection errors, unblock with ‘mysqladmin flush-hosts。
刚开始以为是代码出现问题导致的,后来发现是nginx的后端健康监测导致。

MySQL服务器已经从某个host接收了大量中途终止的连接,于是决定终止继续接收来自该host的连接,允许最大的连接错误数为max_connect_errors,通过show variables命令可以查询,一般为10。

解决方法:在另外一处地方执行mysqladmin flush-host或者登录进mysql执行flush hosts(本机host已经不允许登录!)。
但是flush hosts 只是治标不治本,暂时解决了问题,一会就又会出现。

真正的原因是nginx配置里我注释掉的那一行健康监测, 这会出现一个问题,就是tcp连接会掉线。原因在于当服务端关闭连接的时候,客户端不可能立刻发觉连接已经被关闭,需要等到当Nginx在执行check规则时认为服务端链接关闭,此时nginx会关闭与客户端的连接。
所以注释掉健康监测问题就解决了。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值