在MySQL中删除数据库后如何回收磁盘空间

26

我创建了一些非常大的数据库,但后来删除了其中一些。我注意到我的磁盘空间没有像我预期的那样恢复。例如,我最后添加的数据库实际上使用了所有的可用空间,并且中途失败了,所以我删除了该模式。在此之前我有12.4GB的可用空间,现在仅剩7.52GB可用。
出了什么问题?如何把约5GB的空间恢复回来呢?


1
InnoDB 还是 MyISAM 表? - bot403
1
http://crazytoon.com/2007/04/03/mysql-ibdata-files-do-not-shrink-on-database-deletion-innodb/ - Brad
可能是如何在MySQL中缩小/清除ibdata1文件的重复问题。 - gpoo
1个回答

24

http://dev.mysql.com/doc/refman/5.1/en/innodb-data-log-reconfiguration.html

当前,您无法将数据文件从表空间中删除。要减小表空间的大小,请使用以下过程:

  1. 使用mysqldump导出您的所有InnoDB表。

  2. 停止服务器。

  3. 删除所有现有的表空间文件,包括ibdata和ib_log文件。如果想要备份信息副本,则在删除MySQL安装中的文件之前将所有ib*文件复制到另一个位置。

  4. 删除任何InnoDB表的.frm文件。

  5. 配置新的表空间。

  6. 重新启动服务器。

  7. 导入dump文件。

InnoDB在数据文件中创建了一个文件系统(“表空间”)。当删除数据时,它从不“收缩”数据文件,因为重组文件内的数据可能很昂贵(不能保证已删除的数据在末尾或者是连续的)。通过如上所述重新创建数据库,可以使文件的大小恰好足够存储所有数据,但不会更大。


8
同一问题的更有帮助的回答:https://dev59.com/SXA75IYBdhLWcg3wH1bP#3456885(以下是翻译内容)该回答建议先备份MySQL数据库,然后使用以下步骤来缩小和清空ibdata1文件:
  1. 停止MySQL服务器
  2. ibdata1文件移动到一个安全位置
  3. 删除所有MySQL数据目录中的.frm.ibd.MYD文件
  4. 启动MySQL服务器
  5. 使用mysqldump将备份数据加载回MySQL服务器
这将导致MySQL重新创建新的、更小的ibdata1文件,并在其中存储新数据。但需要注意的是,如果您使用了InnoDB表并且在ibdata1文件中有长时间未使用的表空间,那么这些空间将不会被释放。
- Tgr
以下是提供答案的正确链接:http://dev.mysql.com/doc/refman/5.1/en/innodb-resize-system-tablespace.html - Travis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接