文章

zabbix日志数据占满解决方案

zabbix日志数据占满解决方案

项目概述

公司的zabbix由于之前没有设置自动删除日志,导致zabbix的数据库数据目录直接占满了,查看到是historyhistory_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 进行授权