删除 table 后如何在 InnoDB 中回收磁盘 space
How to reclaim disk space in InnoDB after dropping table
我在mysql有一个大InnoDB
table。问题是我的磁盘 space 快满了。我想减少我的磁盘 space。如果我要从 table 中删除一些行并使用此命令:
optimize TABLE_NAME
那么我的磁盘space就会减少。但是我想删除 table。如果我将 table 删除,则没有任何 table 可以优化它!删除 InnoDB
table 后减少磁盘 space 的适当命令是什么?
实际上要在 MySQL 中删除表后回收 space,您应该在 MySQL 中启用 Per-Table File配置。在这里阅读更多内容:
https://dev.mysql.com/doc/refman/5.6/en/innodb-multiple-tablespaces.html
drop 命令将自动释放磁盘 space。
注意:假设您正在使用 innodb_file_per_table,因为您可以通过优化 table 语法释放 space。
您可以尝试将您的服务器配置为使用 innodb_file_per_table,但请确保您有备份,然后删除并恢复它。您可以 运行 optimize table
.
您可以运行检查innodb_file_per_table是否开启
mysql> show variables like "innodb_file_per_table";
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row in set (0.00 sec)
OPTIMIZE TABLE
复制 table。更具体地说,它确实
- 像现有的那样创建一个新的 table 架构。
- 将行复制到新的 table。
- 重命名以交换 tables.
- 放弃旧的 table。
请特别注意,在短时间内您将有两个 table 副本占用磁盘上的 space。
- 如果磁盘空间太紧 space,这将失败。
- 如果您有
innodb_file_per_table = OFF
,ibdata
文件可能会扩展,但不会缩小。同样,这可能会导致失败。
从 5.6.17 开始,OPTIMIZE TABLE
将原地执行工作。但是,您必须删除并重新添加任何 FULLTEXT
个索引。
DROP TABLE
以下列方式之一工作:
innodb_file_per_table = OFF
:在 ibdata
中释放 space。但是这个space并没有发布到OS。相反,它将被重新用于插入等任何 table.
innodb_file_per_table = ON
:table获取的文件及时发布到OS.
但是...当我提到innodb_file_per_table
的设置时,我指的是table是CREATEd
或最后一个ALTERed
时的设置,不是当前设置。
我在mysql有一个大InnoDB
table。问题是我的磁盘 space 快满了。我想减少我的磁盘 space。如果我要从 table 中删除一些行并使用此命令:
optimize TABLE_NAME
那么我的磁盘space就会减少。但是我想删除 table。如果我将 table 删除,则没有任何 table 可以优化它!删除 InnoDB
table 后减少磁盘 space 的适当命令是什么?
实际上要在 MySQL 中删除表后回收 space,您应该在 MySQL 中启用 Per-Table File配置。在这里阅读更多内容:
https://dev.mysql.com/doc/refman/5.6/en/innodb-multiple-tablespaces.html
drop 命令将自动释放磁盘 space。
注意:假设您正在使用 innodb_file_per_table,因为您可以通过优化 table 语法释放 space。
您可以尝试将您的服务器配置为使用 innodb_file_per_table,但请确保您有备份,然后删除并恢复它。您可以 运行 optimize table
.
您可以运行检查innodb_file_per_table是否开启
mysql> show variables like "innodb_file_per_table";
+-----------------------+-------+
| Variable_name | Value |
+-----------------------+-------+
| innodb_file_per_table | ON |
+-----------------------+-------+
1 row in set (0.00 sec)
OPTIMIZE TABLE
复制 table。更具体地说,它确实
- 像现有的那样创建一个新的 table 架构。
- 将行复制到新的 table。
- 重命名以交换 tables.
- 放弃旧的 table。
请特别注意,在短时间内您将有两个 table 副本占用磁盘上的 space。
- 如果磁盘空间太紧 space,这将失败。
- 如果您有
innodb_file_per_table = OFF
,ibdata
文件可能会扩展,但不会缩小。同样,这可能会导致失败。
从 5.6.17 开始,OPTIMIZE TABLE
将原地执行工作。但是,您必须删除并重新添加任何 FULLTEXT
个索引。
DROP TABLE
以下列方式之一工作:
innodb_file_per_table = OFF
:在ibdata
中释放 space。但是这个space并没有发布到OS。相反,它将被重新用于插入等任何 table.innodb_file_per_table = ON
:table获取的文件及时发布到OS.
但是...当我提到innodb_file_per_table
的设置时,我指的是table是CREATEd
或最后一个ALTERed
时的设置,不是当前设置。