查看Mysql表分区语句
SELECT
partition_name part,
partition_expression expr,
partition_description descr,
table_rows
FROM
INFORMATION_SCHEMA.partitions
WHERE
TABLE_SCHEMA = schema()
AND TABLE_NAME=‘表名’;
1.https://www.cnblogs.com/mliudong/p/3625522.html
2.https://www.cnblogs.com/myvic/p/7711498.html
3.https://www.cnblogs.com/zhishan/p/3285055.html
4.每天定时新增删除分区
参考 https://www.cnblogs.com/lanceblog/p/5532068.html(里面日期应该和文件名差一天,有点问题)
下面是我的:
DELIMITER $$
USE mydb
$$
DROP PROCEDURE IF EXISTS create_Partition_3Ahuadan
$$
CREATE PROCEDURE create_Partition_3Ahuadan
()
BEGIN
/* 事务回滚,其实放这里没什么作用,ALTER TABLE是隐式提交,回滚不了的。*/
DECLARE EXIT HANDLER FOR SQLEXCEPTION ROLLBACK;
START TRANSACTION;
/* 到系统表查出这个表的最大分区,得到最大分区的日期。在创建分区的时候,名称就以日期格式存放,方便后面维护 /
SELECT REPLACE(partition_name,‘p’,’’) INTO @P12_Name FROM INFORMATION_SCHEMA.PARTITIONS
WHERE table_name=‘vote_record_memory’ ORDER BY partition_ordinal_position DESC LIMIT 1;
SET @Max_date= DATE(DATE_ADD(@P12_Name+0, INTERVAL 1 DAY))+0;
SET @Max_date2= DATE(DATE_ADD(@Max_date+0, INTERVAL 1 DAY))+0;
/ 修改表,在最大分区的后面增加一个分区,时间范围加1天 /
SET @s1=CONCAT(‘ALTER TABLE vote_record_memory ADD PARTITION (PARTITION p’,@Max_date,’ VALUES LESS THAN (TO_DAYS (’’’,DATE(@Max_date2),’’’)))’);
/ 输出查看增加分区语句*/
SELECT @s1;
PREPARE stmt2 FROM @s1;
EXECUTE stmt2;
DEALLOCATE PREPARE stmt2;
/* 取出最小的分区的名称,并删除掉 。
注意:删除分区会同时删除分区内的数据,慎重 /
select partition_name into @P0_Name from INFORMATION_SCHEMA.PARTITIONS
where table_name=‘vote_record_memory’ order by partition_ordinal_position limit 1;
SET @s=concat('ALTER TABLE vote_record_memory DROP PARTITION ',@P0_Name);
PREPARE stmt1 FROM @s;
EXECUTE stmt1;
DEALLOCATE PREPARE stmt1;
/ 提交 */
COMMIT ;
END$$
DELIMITER ;
调用 参考https://blog.youkuaiyun.com/small____fish/article/details/7621160
DELIMITER ||
CREATE EVENT Partition_3Ahuadan_event
ON SCHEDULE
EVERY 1 day STARTS ‘2018-11-08 00:48:00’
DO
BEGIN
CALL mydb.create_Partition_3Ahuadan
;
END ||
DELIMITER ;
解释:从2018-11-08开始,每天在 00:48:00进行一次调用。如果再do之前加上on completion not preserve 则只执行一次(on completion not preserve )
使用这个功能之前必须确保event_scheduler已开启,可执行
SET GLOBAL event_scheduler = 1;
或
SET GLOBAL event_scheduler = ON;
来开启,也可以直接在启动命令加上“–event_scheduler=1”,例如:
mysqld … --event_scheduler=1
要查看当前是否已开启事件调度器,可执行如下SQL:
SHOW VARIABLES LIKE ‘event_scheduler’;
或
SELECT @@event_scheduler;
或
SHOW PROCESSLIST;