当前位置: 首页 > MySQL数据库

mysql如何删除分区

时间:2026-01-28 12:53:08

本教程操作环境:windows10系统、mysql8.0.22版本、Dell G3电脑。

mysql删除分区

删除分区语法为:ALTER TABLE '表名' DROP PARTITION '分区名'

清理分区数据为空,保留分区不删除,仅仅是清理数据,命令如下

alter table bm_scenes_data_reminder truncate partition p20210104;

删除分区

alter table bm_scenes_data_reminder drop partition p20210104;

删除后执行查看建表语句,可以看到p20210104分区没有了

增加分区

##如果希望将刚删除的p20210104分区重新加回去?怎么办。先尝试直接执行增加分区命令试试

ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210104 VALUES LESS THAN (738159) ENGINE = InnoDB);

结果如下,说明是不可行的。

mysql> ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210104 VALUES LESS THAN (738159) ENGINE = InnoDB);ERROR 1481 (HY000): MAXVALUE can only be used in last partition definitionmysql>

##1步骤中不可行,提示必须是在最后一个分区的后面才可以这样增加。

因此如果一定要加回p20210104这个分区(即需要在中间部分增加分区),只能将p20210104 后面的分区先全删除,再增加p20210104分区,再后p20210104 后面的分区重新加回去。操作如下:

##先删除p20210104分区后面的所有分区

ALTER TABLE bm_scenes_data_reminder drop PARTITION p20210105;ALTER TABLE bm_scenes_data_reminder drop PARTITION p20210106;ALTER TABLE bm_scenes_data_reminder drop PARTITION p20210107;ALTER TABLE bm_scenes_data_reminder drop PARTITION p20210108;ALTER TABLE bm_scenes_data_reminder drop PARTITION p20210109;ALTER TABLE bm_scenes_data_reminder drop PARTITION p20210110;ALTER TABLE bm_scenes_data_reminder drop PARTITION future;

##增加p20210104分区

ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210104 VALUES LESS THAN (738159) ENGINE = InnoDB);

##把p20210104分区后面的所有分区重新加回去

ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210105 VALUES LESS THAN (738160) ENGINE = InnoDB);ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210106 VALUES LESS THAN (738161) ENGINE = InnoDB);ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210107 VALUES LESS THAN (738162) ENGINE = InnoDB);ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210108 VALUES LESS THAN (738163) ENGINE = InnoDB);ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210109 VALUES LESS THAN (738164) ENGINE = InnoDB);ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210110 VALUES LESS THAN (738165) ENGINE = InnoDB);ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION future VALUES LESS THAN MAXVALUE ENGINE = InnoDB);

最后再查看一下ddl发现分区加回去了,但这种操作方式会把p20210104分区后面的所有分区数据删除,在正式线上环境中请慎

案例

系统有操作系统表sys_log,实现每天删除90天前的分区并同时建一个4天后的分区(即每天将4天后的分区创建表),步骤如下:

##新建普通表,只执行一次

CREATE TABLE `sys_log` (  `id` bigint(20) NOT NULL AUTO_INCREMENT,  `begin_time` datetime DEFAULT NULL COMMENT '开始时间',  `end_time` datetime DEFAULT NULL COMMENT '结束时间',  `spend_mills` int(11) DEFAULT NULL COMMENT '运行时长,单位ms',  `username` varchar(100) DEFAULT NULL COMMENT '用户id',  `log_status` int(11) NOT NULL DEFAULT '0' COMMENT '运行状态,[0]成功[1]失败',  `code` int(11) NOT NULL DEFAULT '0' COMMENT '错误码',  `remote_addr` varchar(50) DEFAULT '' COMMENT '远程地址',  `request_uri` varchar(255) DEFAULT NULL COMMENT '请求路径',  `user_agent` text COMMENT '用户代理',  `req_data` text NOT NULL COMMENT '请求参数',  `resp_data` longtext NOT NULL COMMENT '返回结果',  PRIMARY KEY (`id`) USING BTREE,  KEY `idx_log_begintime` (`begin_time`) USING BTREE COMMENT '系统日志的beginTime字段索引') ENGINE=Innodb DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC

##修改成分区表,只执行一次,留一个当前时间的分区和将来的future分区

ALTER TABLE `sys_log` DROP PRIMARY KEY, ADD PRIMARY KEY(`id`,`begin_time`);alter table sys_log partition by RANGE (to_days(begin_time)) (    PARTITION p20210816 VALUES LESS THAN (738383),    PARTITION future VALUES LESS THAN MAXVALUE);

##每天执行以下的分区操作,进行增加一天的分区,如

ALTER TABLE sys_log drop PARTITION future;ALTER TABLE sys_log ADD PARTITION (PARTITION p20210817 VALUES LESS THAN (738384) ENGINE = InnoDB);ALTER TABLE sys_log ADD PARTITION (PARTITION p20210818 VALUES LESS THAN (738385) ENGINE = InnoDB);ALTER TABLE sys_log ADD PARTITION (PARTITION p20210819 VALUES LESS THAN (738386) ENGINE = InnoDB);ALTER TABLE sys_log ADD PARTITION (PARTITION future VALUES LESS THAN MAXVALUE ENGINE = InnoDB);

##定时任务配置,每天执行一次分区的清理与创建

30 4 * * * /bin/python /home/testuser/SyslogPartitionClear.py >/dev/null 2>&1

上一篇:MySQL索引的优缺点是什么
下一篇:MySQL的SQL优化、索引优化、锁机制、主从复制知识有哪些
mysql
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器
  • 英特尔第五代 Xeon CPU 来了:详细信息和行业反应
  • 由于云计算放缓引发扩张担忧,甲骨文股价暴跌
  • Web开发状况报告详细介绍可组合架构的优点
  • 如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳
  • 美光在数据中心需求增长后给出了强有力的预测
  • 2027服务器市场价值将接近1960亿美元
  • 生成式人工智能的下一步是什么?
  • 分享在外部存储上安装Ubuntu的5种方法技巧
  • 全球数据中心发展的关键考虑因素
  • 英特尔与 Vertiv 合作开发液冷 AI 处理器

    英特尔第五代 Xeon CPU 来了:详细信息和行业反应

    由于云计算放缓引发扩张担忧,甲骨文股价暴跌

    Web开发状况报告详细介绍可组合架构的优点

    如何使用 PowerShell 的 Get-Date Cmdlet 创建时间戳

    美光在数据中心需求增长后给出了强有力的预测

    2027服务器市场价值将接近1960亿美元

    生成式人工智能的下一步是什么?

    分享在外部存储上安装Ubuntu的5种方法技巧

    全球数据中心发展的关键考虑因素