Zabbix歷史數據清理


特別提醒:

a、文中測試的Zabbix版本為 3.0.3 。

b、清理數據屬於高危操作,請在測試環境中驗證后再執行線上操作!!!

 

1、統計數據庫中每個表所占的空間:

mysql> SELECT table_name AS "Tables",
       round(((data_length + index_length) / 1024 / 1024), 2) "Size in MB"
      FROM information_schema.TABLES
      WHERE table_schema = 'zabbixdb'
      ORDER BY (data_length + index_length) DESC;

  

2、清理zabbix一周之前的歷史數據:

!/bin/bash
User="zabbixuser"
Passwd="zabbixpass"
Date=`date -d $(date -d "-7 day" +%Y%m%d) +%s` #取7天之前的時間戳
$(which mysql) -u${User} -p${Passwd} -e "
use zabbixdb;
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 history_text WHERE 'clock' < $Date;
optimize table history_text;
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;
"

3、添加到系統計划任務:

#remove the zabbix mysql data before 7 day's ago
0 3 * * 0 /usr/local/script/clearzabbix.sh > /usr/local/script/clearzabbix.log

 

另:可以使用truncate命令直接清空數據庫:

truncate table history;
truncate table history_uint;
truncate table history_str;
truncate table history_text;
truncate table trends;
truncate table trends_uint;
truncate table events;

如果想要刪除表的所有數據,truncate語句要比 delete 語句快

因為 truncate 刪除了表,然后根據表結構重新建立它,而 delete 刪除的是記錄,並沒有嘗試去修改表。

不過truncate命令雖然快,卻不像delete命令那樣對事務處理是安全的。

因此,如果我們想要執行truncate刪除的表正在進行事務處理,這個命令就會產生退出並產生錯誤信息。 

 

[THE END]


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM