【发布时间】:2011-05-19 07:51:37
【问题描述】:
我有一个大约 20GB 的数据库。我需要删除 5 个表并在其他 3 个表中删除一些列。
删除 5 个可用大约 3 GB 的表并删除其他表中的列应该再释放 8 GB。
如何从 MySQL 中回收这个空间。
我已阅读转储数据库并将其恢复为解决方案之一,但我不确定它是如何工作的,我什至不确定这是否仅适用于删除整个数据库或仅删除部分数据库?
请建议如何解决这个问题。谢谢。
【问题讨论】:
-
@Gaurav - 一旦表被删除,mysql 也会删除物理文件,从逻辑上讲,磁盘空间是可用的。你的问题/意图是什么?
-
我不认为是这样,因为我丢弃了一个 1 GB 的表并且我很确定我没有磁盘空间回来?即使我这样做了,你会如何解决这个问题?
-
@Gaurav - 你之前和之后都做了
du -shc YOUR_DATABASE_DIRECTORY吗?您可以使用optimize table删除列,尽管 mysql 会再次自动处理为表模式更新清理空间 -
@ajreal:也许 Gaurav 没有使用 MyISAM 表? InnoDB 表都在单个文件/块设备上
-
既然你用的是InnoDB,那么你用的是innodb_file_per_table吗?如果没有,您将无法取回空间,因为它位于共享表空间中。 InnoDB 最终会重用它,但你不会马上取回它。