searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Mysql 8.0.30 online ddl instant的Bug

2023-10-23 03:07:03
43
0

1、现象说明

DB Crash,signal 6...hit a bug...

具体表现:

a、实例内核版本8.0.30

b、实例crash sql都是ALTER TABLE `xxx`.`xxxxxx` ADD COLUMN .....

c、介入排查时,没有crash了,`xxx`.`xxxxxx` 表重建过

 

2、原因分析

初步判断为Mysql bug,该bug在8.0.31及以上版本被修复(Bug #34488482、Bug #33937504)

Bug参考:bugs.mysql.com/bug.php?id=107941

a、8.0.29开始online ddl instant算法存在设计缺陷;

b、8.0.12后,instant成为alter table add column新增列的默认算法;

以上两点导致缺陷导致DDL时数据库数据块损坏、DB Crash、及后续的备份失败。

 

备份失败问题详见,Percona官方说明:docs.percona.com/percona-xtrabackup/8.0/error-message-instant.html

 

BUG的内核分析,可以参考:

gitee.com/mirrors/mysql-server/commit/f0992c66fe26ae09d6e503645ac01eaa45de4e5d

 

3、问题影响

a、触发bug时,数据库crash重启;业务连接中断;

b、触发bug后,使用该表可能会不断crash,需要停表的相关业务进行重建表;

c、触发bug后,实例备份失败;

实例异常的影响时长:重启拉起的时长

这个表的影响时长:重启+重建表的时长(取决于表大小和磁盘性能)

建议DDL前对相关表进行备份。

 

4、相关解决方案

a、故障前规避BUG,为DDL指定算法

ALTER TABLE xx add .... , ALGORITHM=INPLACE, LOCK=NONE;

避免使用ALGORITHM=INSTANT、或者ALGORITHM=DEFAULT、或省略这个语句;

 

b、故障时重建表修复,将表的instant字段转为非instant字段

alter table xx engine = InnoDB;

 

c、其他实例的排查方法

SQL:select name from information_schema.innodb_tables where total_row_versions > 0 or instant_cols > 0;

重建表修复:alter table xx1.x1 engine=innodb;

如下图:

 

 

0条评论
作者已关闭评论
zhangchy
4文章数
0粉丝数
zhangchy
4 文章 | 0 粉丝
原创

Mysql 8.0.30 online ddl instant的Bug

2023-10-23 03:07:03
43
0

1、现象说明

DB Crash,signal 6...hit a bug...

具体表现:

a、实例内核版本8.0.30

b、实例crash sql都是ALTER TABLE `xxx`.`xxxxxx` ADD COLUMN .....

c、介入排查时,没有crash了,`xxx`.`xxxxxx` 表重建过

 

2、原因分析

初步判断为Mysql bug,该bug在8.0.31及以上版本被修复(Bug #34488482、Bug #33937504)

Bug参考:bugs.mysql.com/bug.php?id=107941

a、8.0.29开始online ddl instant算法存在设计缺陷;

b、8.0.12后,instant成为alter table add column新增列的默认算法;

以上两点导致缺陷导致DDL时数据库数据块损坏、DB Crash、及后续的备份失败。

 

备份失败问题详见,Percona官方说明:docs.percona.com/percona-xtrabackup/8.0/error-message-instant.html

 

BUG的内核分析,可以参考:

gitee.com/mirrors/mysql-server/commit/f0992c66fe26ae09d6e503645ac01eaa45de4e5d

 

3、问题影响

a、触发bug时,数据库crash重启;业务连接中断;

b、触发bug后,使用该表可能会不断crash,需要停表的相关业务进行重建表;

c、触发bug后,实例备份失败;

实例异常的影响时长:重启拉起的时长

这个表的影响时长:重启+重建表的时长(取决于表大小和磁盘性能)

建议DDL前对相关表进行备份。

 

4、相关解决方案

a、故障前规避BUG,为DDL指定算法

ALTER TABLE xx add .... , ALGORITHM=INPLACE, LOCK=NONE;

避免使用ALGORITHM=INSTANT、或者ALGORITHM=DEFAULT、或省略这个语句;

 

b、故障时重建表修复,将表的instant字段转为非instant字段

alter table xx engine = InnoDB;

 

c、其他实例的排查方法

SQL:select name from information_schema.innodb_tables where total_row_versions > 0 or instant_cols > 0;

重建表修复:alter table xx1.x1 engine=innodb;

如下图:

 

 

文章来自个人专栏
Mysql内核
3 文章 | 1 订阅
0条评论
作者已关闭评论
作者已关闭评论
0
0