意见箱
恒创运营部门将仔细参阅您的意见和建议,必要时将通过预留邮箱与您保持联络。感谢您的支持!
意见/建议
提交建议

mysql如何删除分区

来源:恒创科技 编辑:恒创科技编辑部
2023-12-17 07:17:59

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

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


mysql如何删除分区

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

mysql删除分区

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

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

altertablebm_scenes_data_remindertruncatepartitionp20210104;

删除分区

altertablebm_scenes_data_reminderdroppartitionp20210104;

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

增加分区

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

ALTERTABLEbm_scenes_data_reminderADDPARTITION(PARTITIONp20210104VALUESLESSTHAN(738159)ENGINE=InnoDB);

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

mysql>ALTERTABLEbm_scenes_data_reminderADDPARTITION(PARTITIONp20210104VALUESLESSTHAN(738159)ENGINE=InnoDB);
ERROR1481(HY000):MAXVALUEcanonlybeusedinlastpartitiondefinition
mysql>

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

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

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

ALTERTABLEbm_scenes_data_reminderdropPARTITIONp20210105;
ALTERTABLEbm_scenes_data_reminderdropPARTITIONp20210106;
ALTERTABLEbm_scenes_data_reminderdropPARTITIONp20210107;
ALTERTABLEbm_scenes_data_reminderdropPARTITIONp20210108;
ALTERTABLEbm_scenes_data_reminderdropPARTITIONp20210109;
ALTERTABLEbm_scenes_data_reminderdropPARTITIONp20210110;
ALTERTABLEbm_scenes_data_reminderdropPARTITIONfuture;

##增加p20210104分区

ALTERTABLEbm_scenes_data_reminderADDPARTITION(PARTITIONp20210104VALUESLESSTHAN(738159)ENGINE=InnoDB);

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

ALTERTABLEbm_scenes_data_reminderADDPARTITION(PARTITIONp20210105VALUESLESSTHAN(738160)ENGINE=InnoDB);
ALTERTABLEbm_scenes_data_reminderADDPARTITION(PARTITIONp20210106VALUESLESSTHAN(738161)ENGINE=InnoDB);
ALTERTABLEbm_scenes_data_reminderADDPARTITION(PARTITIONp20210107VALUESLESSTHAN(738162)ENGINE=InnoDB);
ALTERTABLEbm_scenes_data_reminderADDPARTITION(PARTITIONp20210108VALUESLESSTHAN(738163)ENGINE=InnoDB);
ALTERTABLEbm_scenes_data_reminderADDPARTITION(PARTITIONp20210109VALUESLESSTHAN(738164)ENGINE=InnoDB);
ALTERTABLEbm_scenes_data_reminderADDPARTITION(PARTITIONp20210110VALUESLESSTHAN(738165)ENGINE=InnoDB);
ALTERTABLEbm_scenes_data_reminderADDPARTITION(PARTITIONfutureVALUESLESSTHANMAXVALUEENGINE=InnoDB);

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

案例

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

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

CREATETABLE`sys_log`(
`id`bigint(20)NOTNULLAUTO_INCREMENT,
`begin_time`datetimeDEFAULTNULLCOMMENT'开始时间',
`end_time`datetimeDEFAULTNULLCOMMENT'结束时间',
`spend_mills`int(11)DEFAULTNULLCOMMENT'运行时长,单位ms',
`username`varchar(100)DEFAULTNULLCOMMENT'用户id',
`log_status`int(11)NOTNULLDEFAULT'0'COMMENT'运行状态,[0]成功[1]失败',
`code`int(11)NOTNULLDEFAULT'0'COMMENT'错误码',
`remote_addr`varchar(50)DEFAULT''COMMENT'远程地址',
`request_uri`varchar(255)DEFAULTNULLCOMMENT'请求路径',
`user_agent`textCOMMENT'用户代理',
`req_data`textNOTNULLCOMMENT'请求参数',
`resp_data`longtextNOTNULLCOMMENT'返回结果',
PRIMARYKEY(`id`)USINGBTREE,
KEY`idx_log_begintime`(`begin_time`)USINGBTREECOMMENT'系统日志的beginTime字段索引'
)ENGINE=InnodbDEFAULTCHARSET=utf8ROW_FORMAT=DYNAMIC

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

ALTERTABLE`sys_log`DROPPRIMARYKEY,ADDPRIMARYKEY(`id`,`begin_time`);
altertablesys_logpartitionbyRANGE(to_days(begin_time))(
PARTITIONp20210816VALUESLESSTHAN(738383),
PARTITIONfutureVALUESLESSTHANMAXVALUE
);

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

ALTERTABLEsys_logdropPARTITIONfuture;
ALTERTABLEsys_logADDPARTITION(PARTITIONp20210817VALUESLESSTHAN(738384)ENGINE=InnoDB);
ALTERTABLEsys_logADDPARTITION(PARTITIONp20210818VALUESLESSTHAN(738385)ENGINE=InnoDB);
ALTERTABLEsys_logADDPARTITION(PARTITIONp20210819VALUESLESSTHAN(738386)ENGINE=InnoDB);
ALTERTABLEsys_logADDPARTITION(PARTITIONfutureVALUESLESSTHANMAXVALUEENGINE=InnoDB);

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

304***/bin/python/home/testuser/SyslogPartitionClear.py>/dev/null2>&1

关于“mysql如何删除分区”这篇文章的内容就介绍到这里,感谢各位的阅读!相信大家对“mysql如何删除分区”知识都有一定的了解,大家如果还想学习更多知识,欢迎关注恒创行业资讯频道。

上一篇: mysql如何多行注释 下一篇: mysql如何给查询加序号