数据库一张表数据大概有1400w数据,存储空间达到了164GB,贼恐怖

 

干活:

按条件先把表里的数据copy出来,用java代码配合,整理了2020年数据,大概。。。100GB,下图就是归档的数据库(归档放在了另一个服务器里面)

数据迁移完,确认无误后,我这边查看了下MySQL数据库data文件夹有没有变小,没有。。。就用了optimize table 命令,这个命令的作用就是释放delete空间,我跑了下面这个数才跑完,表空间也得到了释放,算了算,清理了近100GB,完美。

 

本来没啥好说的,这操作费时间、费空间- -。跑这个命令,一定一定要注意:看看你服务器剩余空间是不是大于你删除后空间大小。optimize table 这操作,会把原表数据拷贝出来到临时表目录,拷贝完了会再次向data文件夹写数据进去,会造成原表*2的表空间大小,所以要预留你原表(delete操作后的空间)*2的空间,操作完了,它会释放空间。我这边贼搞笑,用了optimize命令,发现C盘在不断增大,吓着我了- -,查了下optimize的原理作用后(查看博文:INNODB — OPTIMIZE TABLE 到底做了些什么事情;)幡然醒悟,卧槽,写临时表里去了!

 

我赶紧查了下服务器临时目录:默认在C:\Windows\Temp,这还了得,要我命三千!赶紧停操作,改mysql配置:

mysqld下加

 tmpdir=d:\\mysqltmp

改完后启动数据库确认下:

改完后,再操作optimize命令,结合资源管理器,发现数据不断写入临时表目录里面(没有当时震撼的截图,只有操作完成后的场面),剩下来的事,等吧- -,操作结束,睡觉。

保险操作:停应用,断数据库连接,别让其他应用使用你要optimize的表 ,防止死锁

 

Logo

腾讯云面向开发者汇聚海量精品云计算使用和开发经验,营造开放的云计算技术生态圈。

更多推荐