我创建了一些非常大的数据库,但后来删除了其中一些。我注意到我的磁盘空间没有像我预期的那样恢复。例如,我最后添加的数据库实际上使用了所有的可用空间,并且中途失败了,所以我删除了该模式。在此之前我有12.4GB的可用空间,现在仅剩7.52GB可用。
出了什么问题?如何把约5GB的空间恢复回来呢?
我创建了一些非常大的数据库,但后来删除了其中一些。我注意到我的磁盘空间没有像我预期的那样恢复。例如,我最后添加的数据库实际上使用了所有的可用空间,并且中途失败了,所以我删除了该模式。在此之前我有12.4GB的可用空间,现在仅剩7.52GB可用。
出了什么问题?如何把约5GB的空间恢复回来呢?
从http://dev.mysql.com/doc/refman/5.1/en/innodb-data-log-reconfiguration.html:
当前,您无法将数据文件从表空间中删除。要减小表空间的大小,请使用以下过程:
使用mysqldump导出您的所有InnoDB表。
停止服务器。
删除所有现有的表空间文件,包括ibdata和ib_log文件。如果想要备份信息副本,则在删除MySQL安装中的文件之前将所有ib*文件复制到另一个位置。
删除任何InnoDB表的.frm文件。
配置新的表空间。
重新启动服务器。
导入dump文件。
InnoDB在数据文件中创建了一个文件系统(“表空间”)。当删除数据时,它从不“收缩”数据文件,因为重组文件内的数据可能很昂贵(不能保证已删除的数据在末尾或者是连续的)。通过如上所述重新创建数据库,可以使文件的大小恰好足够存储所有数据,但不会更大。
ibdata1
文件:ibdata1
文件移动到一个安全位置.frm
、.ibd
和.MYD
文件mysqldump
将备份数据加载回MySQL服务器ibdata1
文件,并在其中存储新数据。但需要注意的是,如果您使用了InnoDB表并且在ibdata1
文件中有长时间未使用的表空间,那么这些空间将不会被释放。 - Tgr