zabbix日志数据占满解决方案
zabbix日志数据占满解决方案
项目概述
公司的zabbix由于之前没有设置自动删除日志,导致zabbix的数据库数据目录直接占满了,查看到是history和history_uint表等历史数据表存储量过大,需要删除表里的一些数据。
项目思路
删除90天之前的数据,或者迁移90天内的数据到一个中转表里面,清空原表,插入中转表到原表。
项目方案一
停止zabbix服务
要先停止zabbix的服务,防止有新的日志写入。
分批删除历史数据
使用 date命令计算 90 天前的时间戳:
1
date -d "$(date -d '-90 day' +%Y%m%d)" +%s
通过 LIMIT限制单次删除量(如 10,000 条),避免数据库压力过大:
1
DELETE FROM history_uint WHERE clock < [时间戳] LIMIT 10000;
释放磁盘空间
执行 OPTIMIZE TABLE [表名]回收删除数据后的碎片空间(此操作会锁表),InnoDB 表会显示 Table does not support optimize,但实际通过重建表实现优化。
项目方案二
1
2
3
4
5
6
7
8
9
10
11
12
# 创建临时表
CREATE TABLE history_temp LIKE history;
# 备份指定的记录
INSERT INTO history_temp SELECT * FROM history WHERE clock >= 时间戳;
# 清空原表
TRUNCATE TABLE history;
# 恢复原来的记录
INSERT INTO history SELECT * FROM history_temp;
# 删除temp表
DROP TABLE history_temp;
# 优化原表
OPTIMIZE TABLE history;
本文由作者按照
CC BY 4.0
进行授权