我有一个使用InnoDB存储引擎的MySQL表;它包含大约2M个数据行。当我从表中删除数据行时,它没有释放已分配的磁盘空间。在运行optimize table
命令之后,ibdata1文件的大小也没有减小。
有没有办法从MySQL回收磁盘空间?
我的情况很糟糕;这个应用程序在大约50个不同的位置运行,现在几乎所有位置都出现了磁盘空间不足的问题。
发布于 2009-08-14 23:13:04
MySQL不会减小ibdata1的大小。永远不会。即使您使用optimize table
从已删除的记录中释放已使用的空间,它也会在以后重用这些空间。
另一种方法是将服务器配置为使用innodb_file_per_table
,但这将需要备份、删除数据库和恢复。积极的一面是,在optimize table
之后,表的.ibd文件减少了。
发布于 2015-02-10 15:22:01
解决空间回收问题的另一种方法是,在基于表范围、基于值的分区内创建多个分区,然后删除/截断分区以回收空间,这将释放存储在特定分区中的整个数据所使用的空间。
当您为您的表引入分区时,表模式中将需要一些更改,如唯一键、包含分区列的索引等。
发布于 2020-05-21 22:51:22
一年前,我在mysql5.7版本上也遇到了同样的问题,ibdata1占用了150 Gb。所以我添加了undo表空间
进行Mysqldump备份
停止mysql服务
从数据目录中删除所有数据
在当前my.cnf中添加下面的还原表空间参数
#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备份
问题解决了!!
https://stackoverflow.com/questions/1270944
复制相似问题