zabbix 历史库清理

zabbix运行一段时间之后,会留下大量的历史 数据,会发现zabbix的数据库一直在增大。运行3个月后笔者的数据库达到了5.7G,可能造成系统性能下降,查看历史数据时查询速度缓慢。
zabbix里面最大的表就是历史记录的表了,网上很多人都是写全部清空这些表的数据,其实我们可以按时间来删除里面的历史记录。

里面最大的表是 “history” 和 “history_uint”两个表;

 

zabbix里面的时间是用的时间戳方式记录,我们可以转换一下,然后根据时间戳来删除;

比如要删除2014年的1月1号以前的数据

1、先将标准时间转换为时间戳

# date +%s -d "2014-01-01 00:00:01"
1388505601

2、mysql清理数据

  • mysql> DELETE FROM `history_uint` WHERE `clock` < 1388505601;

  • mysql> optimize table history_uint;

注:执行过第二行命令之后可能会需要很长的一段时间,中间不要中断,否则容易丢失数据。


这是比较实用的按照时间段删除历史数据,也有方法可以全部清除历史监控数据
zabbix清空历史记录mysql数据库操作:


  • mysql -uroot -p 输入mysql密码

  • use zabbix;

  • truncate table history;

  • optimize table history;

  • truncate table history_str;

  • optimize table history_str;

  • truncate table history_uint;

  • optimize table history_uint;

  • truncate table trends;

  • optimize table trends;

  • truncate table trends_uint;

  • optimize table trends_uint;

  • truncate table events;

  • optimize table events;

注意:此操作会清空zabbix所有历史监控数据,请操作之前备份好数据库!

若使用则脚本如下:(清除30天之前的历史数据)
 
#!/bin/bash
User="root"
Passwd="361way"
Date=`date -d $(date -d "-30 day" +%Y%m%d) +%s` #取30天之前的时间戳
$(which mysql) -u${User} -p${Passwd} -e "
use zabbix;
DELETE FROM history WHERE 'clock' < $Date;
optimize table history;
DELETE FROM history_str WHERE 'clock' < $Date;
optimize table history_str;
DELETE FROM history_uint WHERE 'clock' < $Date;
optimize table history_uint;
DELETE FROM trends WHERE 'clock' < $Date;
optimize table trends;
DELETE FROM trends_uint WHERE 'clock' < $Date;
optimize table trends_uint;
DELETE FROM events WHERE 'clock' < $Date;
optimize table events;
"
 
 
posted @ 2018-05-24 15:42  日出东海,我心向西  阅读(1535)  评论(0)    收藏  举报