mysql 分区表

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

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

 

操作步骤 :

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

show plugins;

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

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,查看分区情况;

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

4,truncate 分区

ALTER TABLE users truncate PARTITION p2;

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

 

 

 

              

 

posted @ 2023-10-13 17:45  王军的个人博客  阅读(17)  评论(0编辑  收藏  举报