【问题标题】:mysql: How to free space (innodb)mysql:如何释放空间(innodb)
【发布时间】:2014-07-04 17:51:17
【问题描述】:

我有一个配置了 innoDB 存储引擎的 mysql 数据库。 我删除了数据库 (drop database <dbname>) 但是磁盘空间还没有解放出来。

/var/lib/mysql 有一些名为ib_logfile0ib_logfile1ibdata1 的“大”文件,其中最后一个非常大。我认为这些文件实际上是原始数据库。

我怎么知道我是否可以删除它们。或者更好的问题是如何删除 数据库,以便回收磁盘空间。

澄清
我想删除完整的数据库并释放磁盘空间。 我不想执行任何恢复。

提前致谢。

【问题讨论】:

  • 这是 serverfault.com 的问题

标签: mysql


【解决方案1】:

不幸的是,一旦分配了空间,就无法缩小这些文件。然而,当添加新数据时,MySQL 会重新使用空间,但文件不会缩小。

要缩小大小,您需要转储数据库,然后再次恢复它们。

您还可以执行以下操作:

在您的配置文件中设置 innodb_file_per_table,这将为每个表创建一个单独的文件。这将允许您在删除数据库后删除这些文件,如果您缩小特定表中的数据,还允许您使用 OPTIMIZE TABLE 命令重建 ibd 文件。

【讨论】:

  • 感谢您的回答。顺便说一句,为每个表创建一个单独的文件(如果有)有哪些缺点?我会失去性能吗?
  • 我想不出使用 innodb_file_per_table 选项的缺点,除了它会创建更多的文件,这可能会使管理它们稍微困难一些。但是使用该选项肯定有一些好处,例如更少的碎片,缩小单个表文件的能力,如果你有一个 2GB 限制的文件系统(现在非常罕见),限制现在适用于每个表,而不是整件事。
【解决方案2】:

一种解决方案是转储然后恢复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-04-19
    • 2010-11-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-07-05
    • 2015-12-15
    相关资源
    最近更新 更多