MySQL的分区、分表、集群

本文介绍Mysql中表分区的查询方法及自动化管理方案,包括如何通过SQL语句查看表分区详情,以及如何利用存储过程和事件调度器实现分区的自动新增和删除,以适应大量数据的高效管理和维护。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

查看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;

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值