我在mysql中有一个很大的InnoDB
表。问题是我的磁盘空间几乎已满。我想减少我的磁盘空间。如果我从表中删除一些行并使用此命令:
optimize TABLE_NAME
然后我的磁盘空间将减少。但我想放弃这张桌子。如果我放下桌子,就没有任何桌子可以优化它!删除InnoDB
表后减少磁盘空间的适当命令是什么?
答案 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
复制该表。更确切地说,是
请特别注意,在短暂的时间内,您将在磁盘上拥有两个表占用空间的副本。
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
而不是当前设置时的设置。