zabbix使用mysql数据库 对表分区

zabbix删除历史数据 mysql 表自动分区、删除

----2016年终总结 二


zabbix清理历史数据是个比较蛋疼的问题,尤其在监控数据较多时,一方面无法彻底释放历史数据空间,一方面数据库删除速度是个瓶颈,housekeeper进程长时间占用过高。

如果对数据库中的history_uint表进行分区,则可以解决以上问题。但此方法不利于数据库的规范管理,仅适用于小规模的监控场景。同时,定时脚本本身也是挖坑,这只是个临时解决方案。

DATA_STAMP_ONE_DAY_LONGTH=86400							#一天的时间戳跨度
LOGFILE="/var/log/zabbix/partition.log"
HISTORY_PERIOD=7  								#历史纪录保留天数
DATA_TODAY=`date +%Y%m%d` 							#获取今天时间
DATA_STAMP_TODAY=`date --date=$DATA_TODAY +%s` 					#今天的时间戳

((HISTORY_TIMESTAMP_LONGTH=$DATA_STAMP_ONE_DAY_LONGTH * $HISTORY_PERIOD)) 	#一个周期的时间戳长度
((DATA_STAMP_TOMORROW=$DATA_STAMP_TODAY + $DATA_STAMP_ONE_DAY_LONGTH)) 		#第二天的时间戳
((DATA_STAMP_HISTORY=$DATA_STAMP_TOMORROW - $HISTORY_TIMESTAMP_LONGTH)) 	#一个周期前的时间戳

DATA_HISTORY=`date -d @$DATA_STAMP_HISTORY +"%Y%m%d"` 				#一个周期前的日期
DATA_TOMORROW=`date -d @$DATA_STAMP_TOMORROW +"%Y%m%d"` 			#第二天的日期

echo ' ' >>$LOGFILE

#创建第二天使用的分区
mysql -u$USER_NAME -p$PASSWORD -D zabbix -e "ALTER TABLE \`history_uint\` ADD PARTITION (PARTITION p$DATA_TOMORROW VALUES LESS THAN ($DATA_STAMP_TOMORROW) ENGINE = InnoDB);" 2> /tmp/partition_temp_log
if [ $? -eq 0 ];then
	echo "SUCCESS! CREATE PARTITION p$DATA_TOMORROW at `date`" >> $LOGFILE
else
	echo "FAILED! CREATE PARTITION p$DATA_TOMORROW at `date`" >> $LOGFILE
	echo `cat /tmp/partition_temp_log` >> $LOGFILE
fi


#删除一个周期前的分区
mysql -u$USER_NAME -p$PASSWORD -D zabbix -e "ALTER TABLE \`history_uint\` DROP PARTITION p$DATA_HISTORY;" 2> /tmp/partition_temp_log
if [ $? -eq 0 ];then
	echo "SUCCESS! DROP PARTITION p$DATA_HISTORY at `date`" >> $LOGFILE
else
	echo "FAILED! DROP PARTITION p$DATA_HISTORY at `date`" >> $LOGFILE
	echo `cat /tmp/partition_temp_log` >> $LOGFILE
fi


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值