19장 복제
목차
복제를 통해 하나의 MySQL 데이터베이스 서버(소스라고 함)에서 하나 이상의 MySQL 데이터베이스 서버(복제본이라고 함)로 데이터를 복사할 수 있습니다. 복제는 기본적으로 비동기이며, 복제본은 소스로부터 업데이트를 받기 위해 영구적으로 연결될 필요가 없습니다. 구성에 따라 모든 데이터베이스, 선택된 데이터베이스 또는 데이터베이스 내의 선택된 테이블을 복제할 수 있습니다.
MySQL에서 복제의 장점은 다음과 같습니다:
-
스케일 아웃 솔루션
-
여러 복제본 간에 부하를 분산시켜 성능을 향상시킵니다. 이 환경에서는 모든 쓰기 및 업데이트가 소스 서버에서 이루어져야 합니다. 그러나 읽기는 하나 이상의 복제본에서 이루어질 수 있습니다. 이 모델은 소스가 업데이트에 전념하므로 쓰기 성능을 향상시킬 수 있으며, 복제본의 수가 증가함에 따라 읽기 속도를 극적으로 증가시킬 수 있습니다.
-
데이터 보안
-
복제본이 복제 프로세스를 일시 중지할 수 있기 때문에, 해당 소스 데이터가 손상되지 않도록 복제본에서 백업 서비스를 실행할 수 있습니다.
-
분석
-
소스에서 실시간 데이터를 생성할 수 있으며, 정보 분석은 소스의 성능에 영향을 주지 않고 복제본에서 수행될 수 있습니다.
-
장거리 데이터 배포
-
복제를 사용하여 원격 사이트에서 사용할 데이터의 로컬 복사본을 생성할 수 있으며, 소스에 대한 영구적인 접근 없이도 가능합니다.
이러한 시나리오에서 복제를 사용하는 방법에 대한 정보는 섹션 19.4, “복제 솔루션”을 참조하십시오. MySQL 8.4는 다양한 복제 방법을 지원합니다. 전통적인 방법은 소스의 바이너리 로그에서 이벤트를 복제하는 방식이며, 소스와 복제본 간에 로그 파일과 그 안의 위치를 동기화해야 합니다.
더 새로운 방법인 글로벌 트랜잭션 식별자(GTIDs) 기반의 방법은 트랜잭셔널하며, 따라서 로그 파일이나 이 파일 내의 위치를 다룰 필요가 없어 많은 일반적인 복제 작업을 크게 단순화합니다.
GTIDs를 사용한 복제는 소스에서 커밋된 모든 트랜잭션이 복제본에 적용된 한 소스와 복제본 간의 일관성을 보장합니다.
MySQL에서 GTIDs 및 GTID 기반 복제에 대한 자세한 내용은 섹션 19.1.3, “글로벌 트랜잭션 식별자를 사용한 복제” 를 참조하십시오.
바이너리 로그 파일 위치 기반 복제 사용에 대한 정보는 섹션 19.1, “복제 구성” 을 참조하십시오.
MySQL의 복제
MySQL에서 복제는 다양한 유형의 동기화를 지원합니다. 원래의 동기화 유형은 단방향 비동기 복제로, 한 서버가 소스 역할을 하고 하나 이상의 다른 서버가 복제본 역할을 합니다. 이는 NDB Cluster의 특성인 동기 복제와 대조됩니다 (자세한 내용은 제 25장, MySQL NDB Cluster 8.4 참조).
MySQL 8.4에서는 내장된 비동기 복제 외에도 반동기 복제가 지원됩니다. 반동기 복제에서는 소스에서 수행된 커밋이 트랜잭션을 수행한 세션으로 돌아가기 전에 최소한 하나의 복제본이 해당 트랜잭션의 이벤트를 수신하고 기록했음을 확인할 때까지 차단됩니다; 자세한 내용은 섹션 19.4.10, “반동기 복제” 참조.
MySQL 8.4는 또한 복제본이 소스보다 최소한 지정된 시간만큼 의도적으로 지연되는 지연 복제를 지원합니다; 자세한 내용은 섹션 19.4.11, “지연 복제” 참조. 동기 복제가 필요한 시나리오에서는 NDB Cluster를 사용하십시오 (자세한 내용은 제 25장, MySQL NDB Cluster 8.4 참조).
서버 간 복제를 설정하기 위한 여러 솔루션이 있으며, 사용할 최상의 방법은 데이터의 존재와 사용 중인 엔진 유형에 따라 다릅니다. 사용 가능한 옵션에 대한 자세한 내용은 섹션 19.1.2, “이진 로그 파일 위치 기반 복제 설정” 참조.
두 가지 핵심 복제 형식이 있습니다:
- Statement Based Replication (SBR): 전체 SQL 문을 복제합니다.
- Row Based Replication (RBR): 변경된 행만 복제합니다.
또한 **Mixed Based Replication (MBR)**이라는 세 번째 변형을 사용할 수 있습니다. 다양한 복제 형식에 대한 자세한 내용은 섹션 19.2.1, “복제 형식”을 참조하십시오.
복제는 여러 가지 옵션과 변수를 통해 제어됩니다. 자세한 내용은 섹션 19.1.6, “복제 및 바이너리 로깅 옵션과 변수”를 참조하십시오.
복제 토폴로지에는 섹션 19.3, “복제 보안”에서 설명한 추가 보안 조치를 적용할 수 있습니다.
복제를 사용하여 성능 문제, 다양한 데이터베이스의 백업 지원, 시스템 장애 완화를 위한 더 큰 솔루션의 일환 등 여러 가지 문제를 해결할 수 있습니다. 이러한 문제를 해결하는 방법에 대한 정보는 섹션 19.4, “복제 솔루션”을 참조하십시오.
복제 중 다양한 데이터 유형과 문장이 어떻게 처리되는지에 대한 노트와 팁, 복제 기능의 세부 사항, 버전 호환성, 업그레이드, 잠재적인 문제 및 그 해결 방법에 대한 내용은 섹션 19.5, “복제 노트 및 팁”을 참조하십시오.
MySQL 복제에 익숙하지 않은 사람들이 자주 묻는 질문에 대한 답변은 섹션 A.14, “MySQL 8.4 FAQ: 복제”를 참조하십시오.
복제의 구현, 복제가 작동하는 방식, 바이너리 로그의 프로세스 및 내용, 백그라운드 스레드 및 문장이 기록되고 복제되는 방식을 결정하는 규칙에 대한 자세한 정보는 섹션 19.2, “복제 구현”을 참조하십시오.