代码改变世界

Percona XtraBackup 8.0.29和INSTANT ADD/DROP Columns

2022-07-26 21:18  abce  阅读(2573)  评论(0编辑  收藏  举报

Oracle’s MySQL 8.0.29扩展了对ALTER TABLE … ALGORITHM=INSTANT的支持:

instant:操作只是修改数据字典中的元数据。在执行阶段会在表上施加一个排他元数据锁。表的数据不受影响,表数据不受影响,使操作瞬间完成。允许并发DML。(在 MySQL 8.0.12中引入)

1.支持用户即时在表的任何位置增加列

2.即时删除列

为了完成以上特性,InnoDB redo log格式对于所有DML操作都发生了变化。

新的redo日志格式引入了一个设计缺陷,会导致instant add/drop columns的表数据损坏。

 

损坏发生在InnoDB crash恢复时。InnoDB在启动时应用redo日志。percona xtrabackup备份时拷贝redo日志文件,在prepare阶段应用日志,将数据至于一致性状态。

 

Percona Server for MySQL 8.0.29修复了这个损坏问题,同时还修复了INSTANT ADD/DROP column带来其它的问题。

 

Percona XtraBackup 8.0.29可以备份Percona Server for MySQL 8.0.29中具有INSTANT ADD/DROP COLUMNS的表。但是对当前的社区版本MySQL 8.0.29仍然有缺陷,备份可能不安全。

 

XtraBackup不可能处理由Community MySQL 8.0.29生成的损坏的重做日志,因此,如果 XtraBackup 8.0.29版本检测到具有INSTANT ADD/DROP列的表,它将不会进行备份,并且会生成错误信息列出受影响表的列表并提供将它们转换为常规表的说明。

 

请避免在没有明确的ALGORITHM=INPLACE时,ALTER ADD/DROP COLUMN。默认ALGORITHM是INSTANT,因此不带ALGORITHM关键字的ALTER TABLE使用新添加的INSTANT算法。

例如:

#这样会起作用:

ALTER TABLE tb1 ADD/DROP COLUMN [...], ALGORITHM=INPLACE/COPY;

#这样就不会起作用:

ALTER TABLE tb1 ADD/DROP COLUMN [...], ALGORITHM=INSTANT;
ALTER TABLE tb1 ADD/DROP COLUMN [...], ALGORITHM=DEFAULT;
ALTER TABLE tb1 ADD/DROP COLUMN [...];

 

如果,已经有了这样的表,建议在备份之前,执行optimize table操作。

 

找出带有INSTANT ADD/DROP COLUMNS的列​

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)

如果没有返回结果记录,那太好了,Percona XtraBackup可以备份你的MySQL 8.0.29 servers;如果有,先执行optimize table操作。

Percona XtraBackup报错信息​

2022-07-01T15:18:35.127689+05:30 0 [ERROR] [MY-011825] [Xtrabackup] Found tables with row versions due to INSTANT ADD/DROP columns
2022-07-01T15:18:35.127714+05:30 0 [ERROR] [MY-011825] [Xtrabackup] This feature is not stable and will cause backup corruption.
2022-07-01T15:18:35.127714+05:30 0 [ERROR] [MY-011825] [Xtrabackup] Please check https://docs.percona.com/percona-xtrabackup/8.0/em/instant.html for more details.
2022-07-01T15:18:35.127723+05:30 0 [ERROR] [MY-011825] [Xtrabackup] Tables found:
2022-07-01T15:18:35.127730+05:30 0 [ERROR] [MY-011825] [Xtrabackup] test/t1
2022-07-01T15:18:35.127737+05:30 0 [ERROR] [MY-011825] [Xtrabackup] test/t2
2022-07-01T15:18:35.127744+05:30 0 [ERROR] [MY-011825] [Xtrabackup] test/t3
2022-07-01T15:18:35.127752+05:30 0 [ERROR] [MY-011825] [Xtrabackup] Please run OPTIMIZE TABLE or ALTER TABLE ALGORITHM=COPY on all listed tables to fix this issue.