目录
前言
工作中一旦zabbix服务监控到一定的规模,zabbix自身的housekeeper功能就无法有效的清理过期数据。因为housekeeper功能是从数据库中查找每一行过期的数据记录并删除它,过期时间的判断规则是根据Zabbix前端页面的设置。housekeeper需要逐个搜索每一条历史数据记录和趋势数据记录,这在mysql数据库规模很大的情况下必然会导致性能差、速度慢。因此当这种情况发生的时候zabbix housekeeper进程会持续地100%繁忙,同时数据库的数据量不断增长。
因此出现了两种非常有效的解决方案可以通过mysql数据库分区实现。两种方案分别是:使用Perl分区、使用储存过程分区。这里不推荐使用储存过程进行分区,因为这种方式一旦当数据库出现故障的时候十分难以排查。所以这里只用Perl进行分区,此方法适用于所有MYSQL系列分支。
实现过程
1.备份现有数据库数据
首先需要停止Zabbix服务进程,不管是在现有数据库分区或者是将数据库复制到另一台服务器进行分区。都需要先进行数据库备份,防止在数据库上执行大规模修改时发生数据损坏以便快速回滚。如果你不会备份命令以下