删除行后mysql回收mysql磁盘空间

时间:2019-12-28 07:03:07

标签: mysql database innodb

首先,很抱歉重复这个重复的问题,因为它已经被问过无数次了。我已经解决了这些问题和答案。

我有一个约159 GB的生产环境表,现在我想将MySQL迁移到另一台服务器。但是,由于数据库总大小超过300 GB,因此我无法轻松迁移它。所以我试图通过从MySQL删除记录来回收空间。我从该表中删除了70%以上的记录,并尝试了OPTIMIZE TABLE,但它给出了错误消息:

 mysql> OPTIMIZE TABLE table_name;
+--------------------------------------+----------+----------+-----------------------+
| Table | Op | Msg_type | Msg_text |
+--------------------------------------+----------+----------+-----------------------+
| table_name | optimize | note | Table does not support optimize, doing recreate + analyze instead |
| table_name | optimize | error | The table 'table_name' is full |
| table_name | optimize | status | Operation failed |
+--------------------------------------+----------+----------+-----------------------+

innodb_file_per_table设置为ON

SHOW VARIABLES LIKE '%innodb_file_per_table%';
Variable_name          Value   
---------------------  --------
innodb_file_per_table  ON      

Mysql版本:5.7.28-log

我在某处读到alter table会有所帮助,但这会降低所有MySQL查询的速度。

在一个答案中,我读到将数据复制到另一个表中,然后重命名并删除原始表(我假设OPTIMIZE TABLE在内部进行)将有所帮助,但这样做将需要停机。

还有其他方法可以实现这一目标吗?

0 个答案:

没有答案