谁吃掉了我的MySQL表行?

谁吃掉了我的MySQL表行?

💡 原文英文,约1300词,阅读约需5分钟。
📝

内容提要

在MySQL的InnoDB表中,使用ALTER TABLE和OPTIMIZE TABLE可能导致重复键错误和数据丢失,受影响版本为8.0.27及之后版本。建议升级到Percona Server for MySQL 8.0.39-30或8.4.2-2以解决问题,使用ALTER TABLE ALGORITHM=COPY可避免此类问题。

🎯

关键要点

  • 在InnoDB表中使用ALTER TABLE和OPTIMIZE TABLE可能导致重复键错误和数据丢失。
  • 受影响的MySQL版本为8.0.27及之后版本。
  • 建议升级到Percona Server for MySQL 8.0.39-30或8.4.2-2以解决问题。
  • 使用ALTER TABLE ALGORITHM=COPY可以避免此类问题。
  • 在2024年春季,客户发现InnoDB表中的一行意外缺失,调查显示没有删除操作。
  • 问题源于在执行ALTER TABLE ALGORITHM=INPLACE时未停止复制,导致并发操作干扰。
  • MySQL Server 8.0.27引入的新并行在线ALTER TABLE代码存在缺陷,可能导致行丢失。
  • 在线ALTER TABLE INPLACE和OPTIMIZE TABLE可能在并发插入时意外失败,导致重复键错误。
  • 行丢失问题在Percona Server for MySQL 8.0.39-30和8.4.2-2中已修复。
  • Oracle MySQL团队尚未接受相关补丁或提出替代修复方案。
  • 建议用户升级到修复版本,或使用ALTER TABLE .. ALGORITHM=COPY作为替代方案。

延伸问答

在MySQL中使用ALTER TABLE和OPTIMIZE TABLE会导致什么问题?

可能导致重复键错误和数据丢失。

哪些MySQL版本受到ALTER TABLE和OPTIMIZE TABLE问题的影响?

受影响的版本为8.0.27及之后的所有8.0.x版本。

如何解决MySQL中ALTER TABLE和OPTIMIZE TABLE导致的问题?

建议升级到Percona Server for MySQL 8.0.39-30或8.4.2-2,或使用ALTER TABLE ALGORITHM=COPY。

ALTER TABLE ALGORITHM=COPY有什么优势?

可以避免在执行过程中出现数据丢失的问题。

为什么在执行ALTER TABLE时会出现行丢失?

因为在执行ALTER TABLE ALGORITHM=INPLACE时未停止复制,导致并发操作干扰。

Oracle MySQL团队对这些问题的态度是什么?

Oracle MySQL团队尚未接受相关补丁或提出替代修复方案。

➡️

继续阅读