mysqladmin flush-hosts问题解决

公司的开发环境数据库有很多开发人员使用,主要是开发人员分散在各地,在外地的开发人员使用的时候经常出现如下错误:

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

原因:

  同一个ip在短时间内产生太多(超过mysql数据库max_connection_errors的最大值)中断的数据库连接而导致的阻塞

一遇到这个问题就要联系我去处理,我只能在数据库中执行如下SQL清除

FLUSH HOSTS;

我已经把max_connect_errors设置为2000了,但是还是很快就超过最大值,一天要处理很多次才行

实在不堪其扰了,只能设置定时器定时执行FLUSH HOSTS;才行了

设置定时器注意事项:

       mysql版本是从5.1开始才支持event的。如果版本太低就升级数据库版本。

       下面语句我操作时都是在mysql库中执行的,我的mysql数据库版本是:5.7.17

第一步:先执行

show VARIABLES LIKE '%event_scheduler%';

如果event_scheduler的值是OFF或者0或者DISABLED的,执行如下SQL打开event功能开关

SET GLOBAL event_scheduler = 1;

更新后效果如下:

第二步:创建存储过程:

 
  1. delimiter//

  2. drop procedure if exists flush_hosts_proce//

  3. create procedure flush_hosts_proce()

  4. begin

  5. FLUSH HOSTS;

  6. end//

  7. delimiter;

第三步:创建事件定时器(每隔120秒调用一次flush_hosts_proce存储过程,执行定时器的间隔时间根据自己的需求进行设置):

 
  1. drop event if exists flush_hosts_event;

  2. create event flush_hosts_event

  3. on schedule every 120 second

  4. on completion preserve disable

  5. do call flush_hosts_proce();

 第四步:开启事件flush_hosts_event

alter event flush_hosts_event on completion preserve enable;

下面验证定时器的执行状态:

select * from performance_schema.host_cache;

如下图: 

 时间到定时器执行后:

查看库中的事件:

select * from  mysql.event;

关闭事件(定时器)flush_hosts_event:

alter event flush_hosts_event on completion preserve disable;

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值