背景
zabbix使用很长时间后,历史数据库越来越大,对服务器的存储造成了很大负担,这些数据在实际使用中已经没有用处。 history.ibd、history_uint.ibd和trends_uint.ibd文件是InnoDB存储引擎的表空间文件,它们分别对应Zabbix数据库中存储不同类型历史数据的表。 history.ibd: 这个文件对应于history表,该表在Zabbix中用于存储不同类型的历史数据,如项目(items)的历史值。这些数据可能包括CPU负载、内存使用、磁盘空间使用情况等,具体取决于你的监控配置。history表可以包含多种类型的数据,包括但不限于浮点数(float)、文本(text)和日志(log)类型的数据。 history_uint.ibd: 这个文件对应于history_uint表,专门用于存储无符号整数(unsigned integer)类型的历史数据。这类数据通常用于计数或表示那些自然为非负整数的度量值,如连接数、进程数、活跃会话数等。使用单独的表来存储这些类型的数据可以提高查询效率,特别是对于需要大量这类数据的报告和仪表板。 trends_uint.ibd: 这个文件对应于trends_uint表,用于存储较长时间范围内(如每天或每周)的聚合数据。与history_uint表相比,trends_uint表存储的数据更为稀疏,因为它侧重于长期趋势而非具体的时间点数据。这样做可以减少存储需求,同时仍然允许用户查看和报告历史趋势。这些数据通常用于生成报告、进行长期分析和预测等。
在Zabbix中,这些表是监控系统性能和状态的核心组成部分,它们允许用户回顾过去的数据,分析趋势,并基于历史数据做出决策。随着系统监控时间的增加,这些表的大小也会相应增长,因此需要定期维护和管理,以确保系统的性能和可靠性。
过程
建立新表
create table history_str_new like history_str;
create table history_uint_new like history_uint;
create table history_new like history;
rename table history_str to history_str_old, history_str_new to history_str;
rename table history_uint to history_uint_old, history_uint_new to history_uint;
rename table history to history_old, history_new to history;
建立硬链接文件
cd /var/lib/mysql/zabbix/
ln history_str_old.ibd history_str_old.ibd.hdlk
ln history_uint_old.ibd history_uint_old.ibd.hdlk
ln history_old.ibd history_old.ibd.hdlk
恢复指定日期的数据
INSERT INTO history SELECT * FROM history_old WHERE clock > 1720356662;
INSERT INTO history_uint SELECT * FROM history_uint_old WHERE clock > 1720356662;
INSERT INTO history_str SELECT * FROM history_str_old WHERE clock > 1720356662;
释放空间
第一个参数为需要执行操作的文件的文件名称
第二个参数为每次执行操作的缩减值,单位为MB
第三个参数为每次执行后的睡眠时间,单位为S
truncate -s 256M history_str_old.ibd.hdlk
truncate -s 256M history_old.ibd.hdlk
truncate -s 256M history_str.ibd.hdlk
借鉴资料
主从数据清空处理,数据全部清空 https://cloud.tencent.com/developer/article/2267758 单机数据保留处理,保留最近一段时间的数据 https://blog.51cto.com/u_14691/9649992
评论区