首先,很抱歉重复这个重复的问题,因为它已经被问过无数次了。我已经解决了这些问题和答案。
我有一个约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
在内部进行)将有所帮助,但这样做将需要停机。
还有其他方法可以实现这一目标吗?