初次认知是分区问题,分区不够了,开始在网上查分区创建方法 alter table history partition by range (clock)(partition p1 values less than MAXVALUE); 在此我给了MAXVALUE一个很大的值,执行了20分钟没有执行完,发现这种方式不行 检查是不是设置了自动分区 show create table history; 发现有一大堆以clock的分区,发现clock是日期,正好是今天凌晨,而一上午没有生成分区,所以导致数据存不进去。知道了原因,先解决,先不探讨为什么有自动分区的问题。zabbix 一次惨痛的分区经历 发现问题了,就先解决问题,创建分区吧 CALL partition_create("zabbix", "history", "p201706140000", 1497456000); 提示没有这个partition_create存储过程,所以无法执行,挺纳闷,先不解决这个; 创建这个存储过程,建议参考:https://www.zabbix.org/wiki/Docs/howto/mysql_partition#partition_create ( 网上不靠谱的太多了) 进入数据库执行下面语句:(root登录,不知道有没有影响)
ok,此时把不存在分区的表都创建上,然后重启zabbix。
现在要查找问题的原因了 因为前面处理zabbix的同事,做了分区分表,然后又在cron内设置了定时任务,定时添加几天的表区 mysql -uzabbix -pxxx -e "CALL partition_maintenance_all('zabbix');" 因为我接手后,不知道这是什么,把zabbix服务器归纳整理后,mysql密码变了,执行不了了,消耗了一上午的时间,不过清晰了zabbix分区过程,也是有收获的 现在要开始总结下分区分表了 查看存储过程:select specific_name from mysql.proc ; 查看过程逻辑:show create procedure partition_create /G 删除存储过程:drop procedure if exists partition_maintenance_all ; 查看存储过程:show procedure status like 'partition_maintenance%' /G; 修改存储过程:ALTER {PROCEDURE|FUNCTION} sp_name [characteriss] 根据官方文档,创建存储过程,包括:create、drop、maintenance、verify、maintenance_all 最好根据自身情况对maintenance_all,进行修改,用于减轻数据。