Please run OPTIMIZE TABLE or ALTER TABLE ALGORITHM=COPY

[Xtrabackup] Found tables with row versions due to INSTANT ADD/DROP columns

报错信息

[ERROR] [MY-011825] [Xtrabackup] Found tables with row versions due to INSTANT ADD/DROP columns
[ERROR] [MY-011825] [Xtrabackup] This feature is not stable and will cause backup corruption.
[ERROR] [MY-011825] [Xtrabackup] Tables found:
[ERROR] [MY-011825] [Xtrabackup] test/t1
[ERROR] [MY-011825] [Xtrabackup] test/t2
[ERROR] [MY-011825] [Xtrabackup] test/t3
[ERROR] [MY-011825] [Xtrabackup] Please run OPTIMIZE TABLE or ALTER TABLE ALGORITHM=COPY on all listed tables to fix this issue.

官方描述

https://docs.percona.com/percona-xtrabackup/8.0/em/instant.html
backup

MySQL 8.0.29 扩展了对 ALTER TABLE … ALGORITHM=INSTANT 的支持:用户可以在表的任何位置即时添加列、即时删除列、添加列时评估行大小限制。

但是为了支持 ALTER TABLE … ALGORITHM=INSTANT 的新特性,InnoDB redo log 格式对于所有 DML 操作都发生了变化。新的 redo 日志格式引入了一个设计缺陷,会导致 instant add/drop columns 的表数据损坏。
由于 XtraBackup 无法处理社区版 MySQL 8.0.29 生成的损坏的 redo log ,因此,如果 XtraBackup 8.0.29 版本检测到具有 INSTANT ADD/DROP 列的表,它将不会进行备份,并且会生成错误信息列出受影响表的列表并提供将它们转换为常规表的说明。

解决方案

备份开始前,先查看 INFORMATION_SCHEMA.INNODB_TABLES 表是否有 INSTANT ADD/DROP 列的表。如果有,可以先执行alter table 操作,然后再去备份。

mysql> SELECT NAME FROM INFORMATION_SCHEMA.INNODB_TABLES WHERE TOTAL_ROW_VERSIONS > 0;
+---------+
| NAME    |
+---------+
| test/t1 |
| test/t2 |
| test/t3 |
+---------+
3 rows in set (0.02 sec

mysql> ALTER TABLE test.t1 engine=InnoDB;
mysql> ALTER TABLE test.t2 engine=InnoDB;
mysql> ALTER TABLE test.t3 engine=InnoDB;

经测试,8.0.29、8.0.30、8.0.31均存在这个问题。建议遇到这个问题后,直接升级版本到8.0.33。

posted @ 2025-07-01 15:56  数据库小白(专注)  阅读(93)  评论(0)    收藏  举报