Mysql 按天自动分区,合并老分区
适用于每天一个分区。。。不断加分区,导致分区不够用的情况
CREATE DEFINER=hehe@XXXXXX PROCEDURE p_auto_partition_day(IN databaseName VARCHAR(50),IN tableName VARCHAR(50),IN daynum VARCHAR(50))
BEGIN
DECLARE v_partion_date DATE;
DECLARE v_partion_date_old DATE;
DECLARE v_now DATE DEFAULT CURDATE();
DECLARE v_partion_name_old VARCHAR(32);
DECLARE v_partion_name VARCHAR(32);
DECLARE v_partion_cond VARCHAR(128);
DECLARE v_sql VARCHAR(1024);
DECLARE v_partion_number VARCHAR(32);
SELECT SUBSTR(MAX(partition_name), 2) INTO v_partion_date FROM information_schema.partitions WHERE TABLE_SCHEMA = databaseName AND TABLE_NAME = tableName;
WHILE NOT v_partion_date > v_now DO
SET v_partion_name = DATE_FORMAT(DATE_ADD(v_partion_date,INTERVAL 1 DAY), '%Y%m%d');
SET v_partion_cond = CONCAT(DATE_FORMAT(DATE_ADD(v_partion_date,INTERVAL 2 DAY), '%Y-%m%-%d'), ' 00:00:00');
SET v_sql = CONCAT('alter table ',tableName,' add partition(partition p', v_partion_name, ' values less than (UNIX_TIMESTAMP(''', v_partion_cond, ''')))');
SET @v_sql = v_sql;
-- select @v_sql;
PREPARE stmt from @v_sql;
EXECUTE stmt;
SET v_partion_date = DATE_ADD(v_partion_date,INTERVAL 1 DAY);
END WHILE;
SELECT SUBSTR(MIN(partition_name), 2) INTO v_partion_date_old FROM information_schema.partitions WHERE TABLE_SCHEMA = databaseName AND TABLE_NAME = tableName;
SELECT COUNT(1) INTO v_partion_number FROM information_schema.partitions WHERE TABLE_SCHEMA = databaseName AND TABLE_NAME = tableName;
WHILE v_partion_number > daynum DO
SET v_partion_name = DATE_FORMAT(DATE_ADD(v_partion_date_old,INTERVAL 1 DAY), '%Y%m%d');
SET v_partion_name_old = DATE_FORMAT(v_partion_date_old, '%Y%m%d');
SET v_partion_cond = CONCAT(DATE_FORMAT(DATE_ADD(v_partion_date_old,INTERVAL 2 DAY), '%Y-%m%-%d'), ' 00:00:00');
SET v_sql = CONCAT('ALTER TABLE ',tableName,' REORGANIZE PARTITION p',v_partion_name_old,',p',v_partion_name,' into(partition p', v_partion_name, ' values less than (UNIX_TIMESTAMP(''', v_partion_cond, ''')))');
SET @v_sql = v_sql;
-- select @v_sql;
PREPARE stmt from @v_sql;
EXECUTE stmt;
SET v_partion_number = v_partion_number-1;
END WHILE;
END
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能