首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从表中删除数据行后,MySQL InnoDB未释放磁盘空间

从表中删除数据行后,MySQL InnoDB未释放磁盘空间
EN

Stack Overflow用户
提问于 2009-08-13 17:21:01
回答 4查看 166.4K关注 0票数 153

我有一个使用InnoDB存储引擎的MySQL表;它包含大约2M个数据行。当我从表中删除数据行时,它没有释放已分配的磁盘空间。在运行optimize table命令之后,ibdata1文件的大小也没有减小。

有没有办法从MySQL回收磁盘空间?

我的情况很糟糕;这个应用程序在大约50个不同的位置运行,现在几乎所有位置都出现了磁盘空间不足的问题。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2009-08-14 23:13:04

MySQL不会减小ibdata1的大小。永远不会。即使您使用optimize table从已删除的记录中释放已使用的空间,它也会在以后重用这些空间。

另一种方法是将服务器配置为使用innodb_file_per_table,但这将需要备份、删除数据库和恢复。积极的一面是,在optimize table之后,表的.ibd文件减少了。

票数 153
EN

Stack Overflow用户

发布于 2015-02-10 15:22:01

解决空间回收问题的另一种方法是,在基于表范围、基于值的分区内创建多个分区,然后删除/截断分区以回收空间,这将释放存储在特定分区中的整个数据所使用的空间。

当您为您的表引入分区时,表模式中将需要一些更改,如唯一键、包含分区列的索引等。

票数 1
EN

Stack Overflow用户

发布于 2020-05-21 22:51:22

一年前,我在mysql5.7版本上也遇到了同样的问题,ibdata1占用了150 Gb。所以我添加了undo表空间

进行Mysqldump备份

停止mysql服务

从数据目录中删除所有数据

在当前my.cnf中添加下面的还原表空间参数

代码语言:javascript
复制
 #undo tablespace
  innodb_undo_directory =  /var/lib/mysql/
  innodb_rollback_segments = 128 
  innodb_undo_tablespaces = 3
  innodb_undo_logs = 128  
  innodb_max_undo_log_size=1G
  innodb_undo_log_truncate = ON

启动mysql服务

存储mysqldump备份

问题解决了!!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1270944

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档