MySQL이나 MariaDB에서 복제를 구성할 때, GTID(Global Transaction ID)라는 용어를 자주 보게 됩니다.
이 글에서는 GTID가 무엇인지, 왜 필요한지, 그리고 어떻게 설정하고 활용하는지까지 자세히 설명해드릴게요.
🔍 GTID란 무엇인가요?
GTID(Global Transaction Identifier)는 MySQL 또는 MariaDB에서 트랜잭션을 고유하게 식별하기 위한 ID입니다.
즉, 하나의 트랜잭션마다 전 세계적으로 유일한 ID가 부여되며, 이 ID를 기준으로 복제(replication)가 이루어집니다.
GTID는 다음과 같은 형식을 가집니다:
서버 UUID:트랜잭션 번호
예시:
3E11FA47-71CA-11E1-9E33-C80AA9429562:23
이 의미는 서버 UUID를 가진 서버에서 발생한 23번째 트랜잭션이라는 뜻입니다.
✅ GTID를 사용하는 이유
GTID는 단순한 트랜잭션 ID가 아닙니다. 복제 환경을 더 안정적이고 쉽게 관리할 수 있도록 도와주는 핵심 도구입니다.
1. 복제 정확성 향상
GTID는 각 트랜잭션에 고유한 ID를 부여하므로, 슬레이브 서버가 어떤 트랜잭션을 실행했는지 정확하게 알 수 있습니다.
2. 자동 복제 위치 결정
기존의 binlog 방식에서는 복제를 시작할 위치를 수동으로 지정해야 했지만, GTID를 사용하면 자동으로 이어받을 수 있습니다.
3. 장애 복구(Failover) 용이
마스터 서버 장애 시, 새로운 마스터를 설정할 때도 GTID 기반이라면 별도 작업 없이 복제를 계속 진행할 수 있습니다.
⚙️ GTID 설정 방법 (MySQL 기준)
GTID를 활성화하려면 my.cnf 설정 파일에 다음과 같이 설정합니다:
gtid_mode = ON
enforce_gtid_consistency = ON
log_slave_updates = ON
binlog_format = ROW
그리고 MySQL을 재시작하면 됩니다.
복제 연결 시에는 AUTO_POSITION = 1을 사용하세요.
CHANGE MASTER TO MASTER_AUTO_POSITION = 1;
🔄 GTID 복제 구성 흐름
- 마스터 서버에서 트랜잭션 실행 → GTID 생성
- 슬레이브 서버는 GTID를 기반으로 복제 진행
- 슬레이브 서버가 해당 GTID를 이미 처리했다면, 해당 트랜잭션은 자동 건너뜀
🧠 한 줄 요약
GTID(Global Transaction ID)는 MySQL 복제에서 트랜잭션을 고유하게 식별하여, 더 안전하고 간편한 복제를 가능하게 하는 시스템입니다.
📌 이런 분들에게 GTID는 필수입니다
- MySQL 또는 MariaDB로 다중 슬레이브 복제 환경을 운영하는 경우
- 마스터 장애 복구(Failover)를 자동화하고 싶은 경우
- 복제 안정성을 최우선으로 고려하는 시스템 관리자
🔗 함께 보면 좋은 글
이 글이 도움이 되셨다면, 복제 구성 시 GTID를 꼭 활용해보세요!
궁금한 점이나 구성 예제가 필요하시면 언제든지 댓글이나 메시지 주세요 😊