Incident Library

IL-0444 Repro · 2024-10-23 (게시일)databaseaws

Aurora MySQL 에서 ALTER TABLE 을 실행할 때마다 그 테이블을 reader 로 읽던 커넥션이 끊겨 애플리케이션 오류가 쏟아졌다

Repro 는 Aurora MySQL 을 쓴다. Aurora MySQL 5.7 로 올린 뒤 운영 환경에서 ALTER TABLE 을 실행할 때마다, 대상 테이블을 reader 로 읽던 MySQL 클라이언트의 커넥션이 끊겨 Lost connection to MySQL server during query 오류가 대량으로 났다. 2021년 1월 8일까지 세 번 연속 일어났다. reader 가 없는 개발 환경에서는 재현되지 않았고, 개발 클러스터에 reader 를 더하자 재현됐다.

AWS 지원팀은 이것이 버그가 아니라 Aurora 가 원래 그렇게 동작하는 것이라고 알려 줬다. Aurora 문서에 따르면 primary 인스턴스에서 실행한 DDL 문은 Aurora Replica 의 데이터베이스 커넥션을 끊을 수 있다. Aurora Replica 의 커넥션이 쓰고 있는 테이블 같은 객체를 primary 인스턴스가 DDL 문으로 바꾸면 그 커넥션이 끊긴다. 팀은 애플리케이션이 커넥션 오류를 받으면 한 번만 재시도하게 했다. Rails 애플리케이션에는 ActiveRecord 의 execute 에 몽키 패치를 적용했다. 트랜잭션 밖의 reader 쿼리가 "Lost connection to MySQL server" 로 실패하면 reconnect! 로 다시 연결한 뒤 한 번 더 실행한다. 트랜잭션 안의 쿼리는 다시 실행하면 결과가 바뀔 수 있어 재시도하지 않는다.

글은 비슷한 버그도 하나 소개했다. ALTER TABLE 을 실행하면 reader 에서 대상 테이블이 잠시 보이지 않아 "Error 1146: Table '...' doesn't exist" 오류가 나는 버그다. 이 버그는 Aurora MySQL 3.05.0 에서 고쳐졌다.

심각도
–
영향 범위
Application processes that read a table through an Aurora reader while ALTER TABLE ran on it got connection errors
영향 사용자
–
지역
–
감지까지
–
복구까지
–

증상

ALTER TABLE 을 실행하면 그 직후 MySQL 클라이언트의 커넥션이 끊겨 오류가 대량으로 나는 일이 있었다.

Aurora MySQL 5.7 로 올린 뒤부터 운영 환경에서 1초도 안 걸리는 ALTER TABLE 을 실행하면, 그 테이블을 읽는 작업이 Lost connection to MySQL server during query 오류로 실패했다. 2021년 1월 8일까지 이런 일이 세 번 연속 일어났다.

개발 환경에서 시험해도 재현되지 않았다. 개발 환경의 Aurora MySQL 클러스터에는 reader 가 없었고, reader 를 더하자 재현됐다. reader 가 있는 클러스터에서 ALTER TABLE 을 실행하면, 그 직후 대상 테이블을 읽는 SQL 을 reader 에 보내던 MySQL 클라이언트의 커넥션이 FIN 을 받고 끊겼다.

팀은 이것을 버그로 보고 재현 순서를 정리해 AWS 지원팀에 문의했다.

증상 연결 리셋오류율 상승

원인

촉발
Aurora MySQL 5.7 로 올린 뒤, reader 가 있는 클러스터의 테이블에 ALTER TABLE 을 실행했다.

감지

–

조치

후속 조치

–

교훈

–

출처

관련 사례

내 클러스터에도 있는지 확인하기

kubegap 은 Claude Code 나 Codex 에서 쿠버네티스 클러스터를 읽기만 하며 이 사례와 같은 상태를 점검합니다. 이 사례의 구성 요소: 데이터베이스. 점검 항목의 근거는 이 사례 같은 공개 보고서입니다.

AI 도구와 스크립트용

API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.