안전하다고 믿었던 MySQL 업그레이드, 예상치 못한 데이터 오류 발생

A safe MySQL upgrade that wasn't so safe

MySQL 버전이 수명 종료에 도달하자, AWS 확장 지원 비용을 피하기 위해 업그레이드를 진행했습니다. 복제본을 먼저 업그레이드하고 문제가 없는지 확인한 뒤 전환했지만, 한 시간 후 이상한 버그가 보고되었습니다. 조사 결과 특정 테이블의 ID가 이전 데이터베이스와 다르게 할당되었고, 이 ID를 참조하는 6개 테이블 중 5개는 올바르게 업데이트되었지만 나머지 하나는 이전 ID를 사용하고 있었습니다. 원인은 AUTO_INCREMENT 컬럼 추가 시 소스와 복제본에서 행 순서가 달라질 수 있다는 점과, binlog_format이 MIXED로 설정되어 일부 UPDATE 문이 ROW 모드로 복제되었기 때문입니다. 이로 인해 복제본에 잘못된 참조가 기록되었습니다. MySQL 복제 환경에서 예상치 못한 데이터 불일치가 발생할 수 있음을 보여주는 사례입니다.

가장 무서운 점은 이런 문제가 예상치 못한 곳에서 발생하고 놓치기 쉽다는 것이지만, 프로덕션에서 재앙으로 이어질 수 있다는 것입니다.

이 날의 다른 글

2026-08-29