mysql 分区表

场景:数据库磁盘爆满,使用delete 无法清理磁盘 ,清理会有binlog,redolog ,磁盘无法释放。

个人遇到的真实场景:数据库数据上千万,要清理历史数据,但是delete 删除数据无法释放磁盘,运维老大哥给的方案,先分区表,然后再truncate 这样就能清理历史数据,磁盘也能释放。

 

操作步骤 :

1,查看数据库是否支持分区:partition   状态是active说明支持分区表。                                                                                      

1
show plugins;

2,将已存在的表进行分区:(也可以在建表的时候就分区)分区时会将同一个分区的数据存储到一起,所以对已存在的表进行分区是需要很多额外的磁盘的

1
2
3
4
alter table users partition by RANGE(id)
(PARTITION p1 VALUES less than (5),
PARTITION p2 VALUES less than (10),
PARTITION p3 VALUES less than MAXVALUE);

我自己使用的是 range方式(还有其他多种方式)进行分区,p1,p2,p3分别是分区名称,指定id为分区字段,最后要有一个默认的分区p3,如果没有这个,当插入id不在这个范围时会报错。

3,查看分区情况;

1
select * from INFORMATION_SCHEMA.PARTITIONS where table_name='users';

4,truncate 分区

1
ALTER TABLE users truncate PARTITION p2;

 这样就将分p2 的数据清除掉了,磁盘也 能释放掉。再次查看分区情况,分区p2 还存在,但是里面的数据行数是0了。

 

 

 

              

 

posted @   王军的个人博客  阅读(25)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~
点击右上角即可分享
微信分享提示