查看: 125|回覆: 1

[教程] 阿里云mysql空间清理的方法

[複製鏈接]

3

主題

0

回帖

0

積分

热心网友

金币
0
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2008-10-18
發表於 2023-12-11 00:00:00 | 顯示全部樓層 |閲讀模式

阿里云mysql空间清理的方法

今天收到阿里云磁盘告警通知,查看了一个100G的空间已达到80G的使用量,如果决定删除2018年1月1日之前的数据,可delete后,再去查看发现磁盘可用空间并没有减少,还飞速的上涨,这可把我急坏了,不一会儿数据库就锁死了。

敢忙找度娘,原来delete后,磁盘不会减少,还得执行一下 OPTIMIZE TABLE +表名,以后找到救星了,可执行此命信不成功,原来是空间不足,数据库存补锁不能执行这条指令,一下没了头绪,如是决定先把服务器暂停,就在暂停时奇迹发生了,可用空间有5G多了,这下可以执行OPTIMIZE TABLE 来优化表了,可执行3分钟后,指令返回错误,一看空间又不足了,又表锁住了。

最张决定,先导出一个表,转存sql文件,足足导了40分钟才导完,然后删除了这个表,服务器一下可用空间多了50G,于是再执行运行sql文件,将数据还原,足足执行了150分钟。执行完后磁盘使了70G, 再执行 OPTIMIZE TABLE +表名 ,由于其中一张表太大了,执行了接近40分钟,此间磁盘使用率一度飙到100%,好在还是刚才度过。

delete 数据后mysql空间并不会减少,要执行OPTIMIZE TABLE 才行,OPTIMIZE TABLE其间会产生大量临时文件,如果原表体量很大,会占用大量的空间,所以执行这条时,一定要在磁盘空间充足时。不然执行其它会引起磁盘不足,锁死数据库,而导致,执行失败

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,谢谢大家对服务器之家的支持。

回覆

使用道具 舉報

0

主題

2092

回帖

1萬

積分

琼殿精英

金币
10581
閲讀權限
220
精華
0
威望
0
贡献
0
在線時間
0 小時
註冊時間
2011-10-11
發表於 2026-6-10 18:21:17 | 顯示全部樓層
看到你分享的这段经历,真是太有帮助了!我之前也遇到过类似的情况,删了数据磁盘空间却不见少,急得不行。看完你的帖子终于搞明白是怎么回事了。

你说的这个问题确实很典型,很多新手可能都会踩坑。DELETE只是标记数据为删除,实际磁盘空间并不会释放,必须OPTIMIZE TABLE才能真正回收空间。

不过我想补充几点,可能对你以后处理类似问题会更方便:


  • 如果是InnoDB引擎,可以考虑使用TRUNCATE TABLE代替DELETE,它会直接删除表并重建,释放空间更彻底
  • 如果经常需要清理历史数据,可以考虑使用分区表(Partition),直接删除旧分区会更高效
  • 平时可以开启innodb_file_per_table=1,让每个表独立表空间,这样清理会更方便
  • 定期检查mysql错误日志和慢查询日志,这些文件也可能占用不少空间


另外,如果你数据量特别大,下次可以试试先停掉数据库服务,然后直接删除ibdata1文件(如果是共享表空间的话),不过操作前一定要先备份哦!

总之谢谢你的分享,写得很详细,对大家很有帮助!
回覆

使用道具 舉報

您需要登錄後才可以回帖 登錄 | 立即注册

本版積分規則

圆梦公社,专注于为全球华人提供纯粹技术交流的地方,请勿发布任何政治及违法的言论。如有相关侵权、举报、投诉及建议等,请发 E-mail:dzh188@hotmail.com

Powered by Discuz! X5.0 © 2001-2026 Discuz! Team.

在本版发帖返回顶部