应用场景
上一篇文章介绍的Zabbix数据表使用TokuDB引擎及分区表,同时需要每个月为这些表新建一个分区,及删除历史分区。由于MySQL不会自动新建及删除分区,所以需要额外创建一个定时任务,来进行表分区的管理。这里采用MySQL的event来做。
实现的思路是:定时任务每个月执行一次,在执行的时候,创建下个月的分区,及删除大于保留时长的历史分区,并将操作记录到log表里,便于查询历史操作记录。
实现方式
相关表结构
总共创建两个表:
- partition_management:将需要进行分区管理的表信息、历史数据保留时长存储在该表
- partition_logs:记录表分区操作记录
1 | USE `zabbix`; |
相关存储过程
总共创建以下3个存储过程:
- prc_partition_create:新建表分区
- prc_partition_drop:删除表分区
- prc_partition_maintenance:调用以上两个存储过程,进行表分区的新建与删除
1 | -- Procedure: prc_partition_create |
相关定时任务
创建一个event(event_partition_maintenance
),每月执行一次,通过调用存储过程prc_partition_maintenance
,来达到管理分区的目的。
1 | -- Event: event_partition_maintenance |
脚本共享
以上所有脚本的完整文件,可以从以下GitHub源获取:
https://github.com/tyoungcn/mysql_operations/tree/master/zabbix_auto_partition
参考文档
- 处理Zabbix历史数据库办法二——使用MySQL表分区:
http://john88wang.blog.51cto.com/2165294/1771557