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了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~