背景
由于zabbix历史数据过大,导致占用过多磁盘空间,需清理数据,释放空间
1、查看表占用空间情况
SELECT table_name AS "Tables",
round(((data_length + index_length) / 1024 / 1024), 2) "Size in MB"
FROM information_schema.TABLES
WHERE table_schema = ‘zabbix‘
ORDER BY (data_length + index_length) DESC;
2、分析表数据
从上面较大的表看,主要集中history_unit,history两张表,而且是存储历史数据,
a、查看history_uint和history数据表结构,可以根据clock时间戳来进行数据删除
MariaDB [zabbix]> desc history_uint;
+--------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| itemid | bigint(20) unsigned | NO | MUL | NULL | |
| clock | int(11) | NO | | 0 | |
| value | bigint(20) unsigned | NO | | 0 | |
| ns | int(11) | NO | | 0 | |
+--------+---------------------+------+-----+---------+-------+
4 rows in set (0.26 sec)
MariaDB [zabbix]> desc history;
+--------+---------------------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+--------+---------------------+------+-----+---------+-------+
| itemid | bigint(20) unsigned | NO | MUL | NULL | |
| clock | int(11) | NO | | 0 | |
| value | double(16,4) | NO | | 0.0000 | |
| ns | int(11) | NO | | 0 | |
+--------+---------------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
MariaDB [zabbix]>
3、清理表数据,建议停止zabbix server服务。
a、取30天前时间戳
[[email protected] ~]#
[[email protected] ~]# date +%s -d "Jun 4, 2019 00:00:00"
1559577600
[[email protected] ~]#
b、按照时间戳删除数据,并优化
delete from history where clock < 1559577600;
optimize table history
自动删除历史数据脚本:
#!/bin/bash
User="zabbix"
Passwd="zabbix"
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_uint WHERE ‘clock‘ < $Date;
optimize table history_uint;
原文地址:https://blog.51cto.com/7585527/2417012
时间: 2024-11-01 18:13:14