運維之道 | Zabbix使用shell腳本定期自動化清理數據庫歷史數據

前言

zabbix運行一段時間之後,會留下大量的歷史數據,會發現zabbix的數據庫一直在增大。運行3個月後筆者的數據庫達到了5G,可能造成系統性能下降,查看歷史數據時查詢速度緩慢。

zabbix裏面最大的表就是歷史記錄的表了,網上很多人都是寫全部清空這些表的數據,其實我們可以按時間來刪除裏面的歷史記錄。


一、查看數據庫中zabbix的存儲

1、登錄數據庫
[root@zabbix ~]# mysql -uroot -p
2、查看數據庫zabbix庫中的存儲
MariaDB [(none)]> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| zabbix             |
+--------------------+
5 rows in set (0.00 sec)
MariaDB [(none)]> use zabbix;
MariaDB [zabbix]> select table_name, (data_length+index_length)/1024/1024 as total_mb, table_rows from information_schema.tables where table_schema='zabbix';

在這裏插入圖片描述


二、編寫zabbix自動清理歷史數據的腳本,保留30天的數據

1、編寫腳本
[root@zabbix ~]# vim /tmp/zabbix_olddata_clean.sh

#!/bin/bash
User="root"					#數據庫登錄用戶
Passwd="123456"				#數據庫登錄密碼
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;
"
2、授予腳本可執行權限,並執行清理腳本
[root@zabbix ~]# chmod +x /tmp/zabbix_olddata_clean.sh
[root@zabbix ~]#sh /tmp/zabbix_olddata_clean.sh

在這裏插入圖片描述

3、將zabbix_olddata_clean腳本加入計劃任務中
[root@zabbix ~]# crontab -e

35 03 1 * * /bin/bash /tmp/zabbix_olddata_clean.sh
### 每個月1號凌晨335執行此腳本
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章