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 을 실행했다.
감지
–
조치
- 애플리케이션이 커넥션 오류를 받으면 한 번만 재시도하게 했다. Rails 애플리케이션에는 트랜잭션 밖의 reader 쿼리가 "Lost connection to MySQL server" 로 실패하면 다시 연결해 한 번 더 실행하는 몽키 패치를 적용했다.
후속 조치
–
교훈
–
출처
관련 사례
IL-0572Merpay 회계 이벤트 처리 시스템에서 Cloud Pub/Sub 메시지 1000만 건이 밀려 새 회계 데이터가 하루 넘게 Cloud Spanner에 들어가지 못했다Mercari · 2026같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0316밀린 배포가 한꺼번에 몰린 Control Plane 에서 새 버전 PgBouncer 가 CPU 와 메모리를 비정상적으로 많이 써 데이터베이스 연결이 타임아웃됐다Railway · 2025같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0117인그레스 업그레이드가 네트워크 컨트롤 플레인 회귀를 일으켜 데이터 플레인이 잠깐 끊겼고, 한꺼번에 재시작한 서비스들이 백엔드 저장소에 과부하를 일으켜 OpenAI API 오류가 늘었다OpenAI · 2024같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
IL-0308RevenueCat 이 Aurora PostgreSQL 10 에서 14 새 클러스터로 넘어간 직후 쿼리가 극도로 느려져 대시보드와 SDK 엔드포인트가 세 시간 넘게 실패했다RevenueCat · 2022같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
같은 원인 · 공통 데이터베이스
내 클러스터에도 있는지 확인하기
AI 도구와 스크립트용
- 이 사례의 JSON: https://incidentlib-api.benchlet.com/cases/IL-0444
- 가장 비슷한 사례들: https://incidentlib-api.benchlet.com/cases/IL-0444/similar
- MCP 서버(Streamable HTTP, 키 없음):
https://incidentlib-mcp.benchlet.com/mcp
API 는 키가 필요 없습니다. MCP 서버는 search_incidents, get_incident, list_incidents, get_topic, vocab 도구를 내놓습니다. 사용법은 API 와 MCP.