结论先行

Percona Server 在某些极端场景下会发生数据丢失情况,正常的业务场景下一般不会触发,升级到最新版本的稳定性风险大于此风险,可以通过使用工具、调整相关参数的方式进行风险规避。

背景相关

影响原因:在 Percona Server 8.0.27-18 版本中新增并行DDL功能后,在INPLACE模式的DDL操作中重建主键索引时,因错误处理会略过部分记录,导致数据丢失的风险。 触发条件:只影响INPLACE模式的DDL操作,不影响COPY和INSTANT模式的DDL操作,主要是2种场景: 场景1:ALTER TABLE ENGINE=INNODB 重整表空间操作,需要重建主键索引。 场景2:ALTER TABLE ADD NEW-COL ...,ALGORITHM=INPLACE,新增列操作,因指定了INPLACE模式,需要重建主键索引。 影响版本:Percona Server  8.0.27-18 至 8.0.37-29 当前版本:Percona Server  8.0.33-25(处于影响版本内)  

一般影响评估

一般的DDL主要业务场景与影响如下: image.png

场景模拟 创建一张表,插入1千条数据后,进行删除、inplace DDL等操作,判断DDL前后数据变化,确认是否丢失数据 脚本使用参考:https://mp.weixin.qq.com/s/D9S--A02PIgJanlHnutxew innodb_ddl_buffer_size=1MB(默认,当前配置) image.png

innodb_ddl_buffer_size=100MB image.png

风险规避

1、增加重建表SOP 统一使用gh-ost/pt-osc进行表重建 2、对instant DDL次数进行监控 增加instant DDL次数的巡检项,当超过上限时,及时进行一次工具重建表,降低其水位 3、增大innodb_ddl_buffer_size 增大innodb_ddl_buffer_size由默认1MB增加到100MB 影响:预估DDL时对实例内存使用增加100-200MB左右,影响较小 4、其他 其他可能引起丢失数据的DDL重建表的相关操作(一般无对应业务场景),如遇到时可均使用gh-ost/pt-osc工具进行执行规避风险。 image.png

<br> 相关链接: https://docs.percona.com/percona-server/8.0/release-notes/8.0.39-30.html#bug-fixes https://perconadev.atlassian.net/browse/PS-9144 https://mp.weixin.qq.com/s/D9S--A02PIgJanlHnutxew