mysql删除的数据如何清理磁盘占用?
1. 服务器环境,磁盘大小1T,mysql版本5.7。存储了几千万数据,大概占用磁盘800G。
2. 问题描述?
某一天接到了需求一部分数据不需要了,需要删除一部分数据,我使用delete语句删除了一半数据
DELETE FROM `table` WHERE ***
删除之后发现磁盘占用还是800G左右,基本没什么变化,不应该是400G吗
各种查找之后,释放磁盘占用都是用OPTIMIZE TABLE
执行OPTIMIZE TABLE会报错,磁盘空间不足,总共1T的大小,占用800G,剩下的200G不够执行OPTIMIZE TABLE命令
3. 您期望得到的结果?
扩充磁盘不太方便
数据太大,备份到本地需要时间太久,也总是各种报错不成功
想问下各位大佬,在不扩充磁盘和备份数据到本地的情况下,还有没有其他方法能释放删除数据的磁盘占用?
补充
有兄弟评论执行ALTER TABLE table_name ENGINE=INNODB;重建表可以释放空间
我试了一下执行这个也是需要空间的,和OPTIMIZE TABLE一样,剩余的200G是不够用的,都是如下报错
ERROR 1114 (HY000): The table 'table_name' is full
希望有经验的兄弟分享一下
ALTER TABLE
table_name
ENGINE=INNODB;可以重建表,释放空间
试试轮询分批清?
对跨端开发有经验的来这。工作:招聘远程全职前端,硬性要求,必须有uniapp跨端开发经验。
笨办法,直接建个新数据库,一批一批的同步到新数据库然后备份到本地,最后在同步回服务器上
一张表一张的处理,需要的数据插入的备用表,然后TRUNCATE表,删除表,改名字,可以写个mysql存储过程执行
不方便扩容磁盘,可以尝试过分批次处理,写个脚本处理下
先查询下表的大小看下有没有具体的减少。数据少了一半不可能没变化的吧,除非你们的数据库有开启 binlog的记录。
如果能确定删除对已有数据影响不大,可以先把mysql的binlog删掉
删了一半数据没变化,不用猜都知道是二进制日志塞满了,直接暴力删除(注意保留最新的一个)
普通的删除,因为是带事务的,空间释放没有那么快比较快的方式,是备份表,删除,重建