mysql如何删除分区

网友投稿 396 2023-11-26

mysql如何删除分区

这篇文章主要介绍了mysql如何删除分区的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇mysql如何删除分区文章都会有所收获,下面我们一起来看看吧。

mysql如何删除分区

在mysql中,可以利用alter语句配合“DROP PARTITION”来删除分区,“DROP PARTITION”的作用就是用于删除指定的分区,语法为“ALTER TABLE 表名 DROP PARTITION 分区名 ”。

本教程操作环境: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 (PARTITIONp20210104VALUES LESS THAN (738159ENGINE = 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 TABLEbm_scenes_data_reminderdrop PARTITION p20210106; ALTER TABLE bm_scenes_data_reminder drop PARTITION p20210107; ALTER TABLEbm_scenes_data_reminderdrop 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 PARTITIONfuture;

##增加p20210104分区

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

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

ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITIONp20210105VALUES LESS THAN (738160ENGINE = InnoDB); ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITIONp20210106VALUES LESS THAN (738161ENGINE = InnoDB); ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITIONp20210107VALUES LESS THAN (738162ENGINE = InnoDB); ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210108 VALUES LESS THAN (738163ENGINE = InnoDB); ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210109 VALUES LESS THAN (738164ENGINE = InnoDB); ALTER TABLE bm_scenes_data_reminder ADD PARTITION (PARTITION p20210110 VALUES LESS THAN (738165ENGINE = 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(20NOT NULL AUTO_INCREMENT,   `begin_time` datetime DEFAULT NULL COMMENT 开始时间,   `end_time`datetimeDEFAULT NULL COMMENT 结束时间,   `spend_mills` int(11DEFAULT NULL COMMENT 运行时长,单位ms,   `username` varchar(100DEFAULT NULL COMMENT 用户id,   `log_status` int(11NOT NULL DEFAULT 0 COMMENT 运行状态,[0]成功[1]失败,   `code` int(11NOT NULL DEFAULT 0 COMMENT 错误码,   `remote_addr` varchar(50DEFAULT  COMMENT 远程地址,   `request_uri` varchar(255DEFAULT 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 KEYADD 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 THANMAXVALUE );

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

ALTER TABLE sys_log drop PARTITION future; ALTER TABLE sys_log ADD PARTITION (PARTITION p20210817 VALUES LESS THAN (738384ENGINE = InnoDB); ALTER TABLE sys_log ADD PARTITION (PARTITION p20210818 VALUES LESS THAN (738385ENGINE = InnoDB); ALTER TABLE sys_log ADD PARTITION (PARTITION p20210819 VALUES LESS THAN (738386ENGINE = 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如何删除分区”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注行业资讯频道。

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:数据库大师盖国强受聘达梦数据库专家委员会资深专家
下一篇:汇智聚贤,达梦数据打造中国数据库人才高地
相关文章

 发表评论

暂时没有评论,来抢沙发吧~