1、統計數據庫中每個表所佔的空間:
1 2 3 4 5 | 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一週之前的歷史數據:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | ! /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、添加到系統計劃任務:
1 2 | #remove the zabbix mysql data before 7 day's ago 0 3 * * 0 /usr/local/script/clearzabbix .sh > /usr/local/script/clearzabbix .log |
另:可以使用truncate命令直接清空數據庫:
1 2 3 4 5 6 7 | 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刪除的表正在進行事務處理,這個命令就會產生退出併產生錯誤信息。