结论先行
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主要业务场景与影响如下:

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

innodb_ddl_buffer_size=100MB

风险规避
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工具进行执行规避风险。

<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
















