如何在删除表后回收InnoDB中的磁盘空间

时间:2015-09-16 12:39:51

标签: mysql innodb diskspace

我在mysql中有一个很大的InnoDB表。问题是我的磁盘空间几乎已满。我想减少我的磁盘空间。如果我从表中删除一些行并使用此命令:

optimize TABLE_NAME

然后我的磁盘空间将减少。但我想放弃这张桌子。如果我放下桌子,就没有任何桌子可以优化它!删除InnoDB表后减少磁盘空间的适当命令是什么?

4 个答案:

答案 0 :(得分:2)

drop命令会自动释放磁盘空间。

注意:假设您正在使用innodb_file_per_table,因为您可以通过优化表格语法来释放空间。

答案 1 :(得分:2)

您可以尝试将服务器配置为使用innodb_file_per_table,但请确保您拥有备份,然后删除并还原它。您可以运行optimize table

您可以运行以检查innodb_file_per_table是否为ON

mysql> show variables like "innodb_file_per_table";
+-----------------------+-------+
| Variable_name         | Value |
+-----------------------+-------+
| innodb_file_per_table | ON    |
+-----------------------+-------+
1 row in set (0.00 sec)

答案 2 :(得分:1)

实际上要在MySQL中删除表后回收空间,你应该在MySQL配置中启用每表文件。在这里阅读更多内容:

https://dev.mysql.com/doc/refman/5.6/en/innodb-multiple-tablespaces.html

答案 3 :(得分:1)

OPTIMIZE TABLE 复制该表。更确切地说,是

  1. 创建一个与现有表类似的新表架构。
  2. 将行复制到新表中。
  3. 重命名以交换表。
  4. 丢掉旧桌子。

请特别注意,在短暂的时间内,您将在磁盘上拥有两个表占用空间的副本。

  • 如果磁盘空间太紧,这将失败。
  • 如果您有innodb_file_per_table = OFF,则ibdata文件可能会扩展,但不会收缩。同样,这可能会导致失败。

从{5.6.17开始,OPTIMIZE TABLE将执行工作。但是,必须删除并重新添加任何FULLTEXT索引。

DROP TABLE 以下列方式之一工作:

  • innodb_file_per_table = OFF:释放ibdata中的空间。但是此空间不会释放到OS。相反,它将被重复用于任何表的插入等操作。
  • innodb_file_per_table = ON:该表获取的文件会立即发布到操作系统。

但是...当我指的是innodb_file_per_table的设置时,是指表是CREATEd或最后一个ALTERed而不是当前设置时的设置。