외부 복제본 구성에 대한 자세한 내용은 외부 복제 정보를 참조하세요.
외부 복제본 구성 설정
시작하기 전에
이 태스크를 시작하기 전에 Cloud SQL 인스턴스와 외부 복제본 요구사항을 충족하는 외부 MySQL 인스턴스가 있어야 합니다.
기본 인스턴스 구성
- Google Cloud 콘솔의 Cloud SQL 인스턴스 페이지로 이동합니다.
- 기본 인스턴스에서 외부 복제본의 IP 주소에 대한 액세스를 사용 설정합니다.
IP 액세스를 사용 설정하는 방법은 IP 연결을 위한 액세스 구성을 참조하세요.
- 나중에 사용할 수 있도록 기본 인스턴스의 공개 IP 주소와 공개 발신 IP 주소를 기록합니다. 인스턴스의 개요 페이지에서 이러한 값을 확인할 수 있습니다.
- 오른쪽 상단에 있는 Cloud Shell 아이콘()을 클릭합니다.
- Cloud Shell 프롬프트에서 기본 제공 MySQL 클라이언트를 사용하여 기본 인스턴스에 연결합니다.
gcloud sql connect PRIMARY_INSTANCE_NAME \ --user=root
- 루트 비밀번호를 입력합니다. 그러면 mysql 프롬프트가 표시됩니다.
- 복제를 위한 특별 사용자를 만들고 복제 권한을 부여합니다.
CREATE USER 'REPLICATION_USER'@'%' IDENTIFIED BY 'REPLICATION_USER_PASSWORD'; GRANT REPLICATION SLAVE ON *.* TO 'REPLICATION_USER'@'%';
- 새 데이터베이스로 시작하는 경우 기본 인스턴스와 복제본 인스턴스 모두에 동일한 데이터베이스와 테이블을 만듭니다. 예를 들면 다음과 같습니다.
CREATE DATABASE test; USE test; CREATE TABLE replica_test (id SERIAL PRIMARY KEY, data text); INSERT INTO replica_test (data) VALUES ('apple'), ('banana'), ('cherry');
- 기본 인스턴스에 이미 데이터베이스가 있는 경우 복제본에 동일한 데이터베이스를 만들어야 합니다. 이렇게 하려면 데이터베이스를 기본 인스턴스에서 Cloud Storage 버킷으로 내보내고 복제본으로 가져옵니다. Cloud SQL에서 Cloud Storage의 SQL 덤프 파일로 데이터 내보내기 자세히 알아보기
외부 복제본 구성
경고: 이 절차를 수행하면 기본 인스턴스의 설정과 데이터가 복제본에서 MySQL 데이터베이스에 호스팅된 모든 데이터(사용자와 비밀번호 포함)를 덮어씁니다.-
복제본을 호스팅하는 머신에서 기본 인스턴스에서 만든 내보내기 파일을 사용하여 새 외부 MySQL 인스턴스를 시드합니다.
예를 들어 다음 명령어는
mydump.sql
이라는 내보낸 파일을 로드합니다.mysql --user=root --password < mydump.sql
- 이 복제본-기본 쌍의 서버 ID를 결정합니다.
이 서버 ID는 외부 복제본 구성 전체에서 고유한 숫자 값(예: '3')이어야 합니다(모든 복제본에는 고유한 서버 ID가 있어야 함).
- 복제본의
my.cnf
옵션 파일에 다음 옵션을 추가합니다.[mysqld] server-id=[SERVER_ID] gtid_mode=ON enforce_gtid_consistency=ON log_slave_updates=ON replicate-ignore-db=mysql binlog-format=ROW log_bin=mysql-bin expire_logs_days=1 read_only=ON
MySQL 복제 옵션에 대한 자세한 내용은 복제 및 바이너리 로깅 옵션을 참조하세요.
- 구성 파일이 읽히도록
mysqld
프로세스를 다시 시작합니다. - 복제본의
mysql
클라이언트에서 다음 명령어를 입력합니다.CHANGE MASTER TO MASTER_HOST='MASTER_IP_ADDRESS', MASTER_USER='REPLICATION_USER', MASTER_PASSWORD='REPLICATION_PASSWORD', MASTER_AUTO_POSITION=1;
- 복제본에 복제를 시작합니다.
START SLAVE;
복제 상태를 확인합니다.
SHOW SLAVE STATUS\G;
'Waiting for master to send event'가 표시되면 복제가 진행되고 있는 것입니다.
외부 복제본 기본 인스턴스 강등
Cloud SQL 인스턴스에 외부 복제본이 있는 경우 구성을 되돌릴 수 있으며 그에 따른 변경사항은 다음과 같습니다.
- 외부 복제본이 새 기본 인스턴스가 됩니다.
- Cloud SQL 인스턴스는 이전에 외부 복제본(지금은 소스 데이터베이스 서버로 지칭)이었던 서버에서 복제되는 읽기 복제본이 됩니다.
외부 복제본 구성을 되돌리는 방법은 다음과 같습니다.
-
소스 표현 인스턴스를 만듭니다.
이 인스턴스는 강등 작업이 완료된 후 Cloud SQL 복제본에 대한 소스 데이터베이스 서버를 표현합니다.
gcloud auth login ACCESS_TOKEN="$(gcloud auth print-access-token)" curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data '{ "name": "SOURCE_REPRESENTATION_NAME", "region": "REGION", "databaseVersion": "EXTERNAL_SERVER_DATABASE_VERSION", "onPremisesConfiguration": { "hostPort": "EXTERNAL_SERVER_IP:EXTERNAL_SERVER_PORT" } }' \ -X POST \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances
Cloud SQL 복제본을 상주시킬 지역을 사용합니다.
강등 절차를 시작합니다.
이 API 호출을 사용할 때는 민감한 정보를 입력해야 하므로 명령줄에 데이터를 제공하지 말고 JSON 파일을 사용하여 데이터를 cURL에 제공해야 합니다.
데이터 파일을 만듭니다.
{ "demoteMasterContext": { "replicaConfiguration": { "mysqlReplicaConfiguration": { "username": "REPLICATION_USERNAME", "password": "PASSWORD", "caCertificate": "EXTERNAL_SERVER_CA", "clientCertificate": "CLIENT_CERT", "clientKey": "PRIVATE_KEY" } }, "masterInstanceName": "SOURCE_REPRESENTATION_NAME", }, }
그런 다음 API를 호출합니다.
curl --header "Authorization: Bearer ${ACCESS_TOKEN}" \ --header 'Content-Type: application/json' \ --data @PATH_TO_DATA_FILE \ https://sqladmin.googleapis.com/sql/v1beta4/projects/PROJECT-ID/instances/INSTANCE_NAME/demoteMaster
SSL/TLS 옵션에 대한 자세한 내용은 SSL/TLS 옵션을 참조하세요.
replicaConfiguration
객체에서 사용하는 속성에 대한 자세한 내용은 외부 서버에서 복제를 참조하세요.-
외부 복제본이 기본 인스턴스에서 대기 중인 모든 트랜잭션을 완료할 때까지 기다립니다.
복제본이 포착되면
SHOW SLAVE STATUS
명령어에서Seconds Behind Master
가 0으로 표시되고 외부 복제본과 Cloud SQL 기본 인스턴스의Executed_Gtid_Set
값이 동일해집니다. mysql
클라이언트를 사용하여 외부 복제본의 복제를 중지합니다.STOP SLAVE RESET SLAVE ALL
Cloud SQL 인스턴스가 소스 데이터베이스 서버에 해당하는 외부 서버에서 복제를 시작할 때까지 기다립니다.
Cloud SQL 인스턴스에서
SHOW SLAVE STATUS
명령어를 실행하면 복제 상태를 확인할 수 있습니다.- Cloud SQL 인스턴스가 소스 데이터베이스 서버에서 복제를 성공적으로 마치면 소스 데이터베이스 서버의
read_only
플래그를off
로 설정하고 소스 데이터베이스 서버를 가리키도록 애플리케이션을 업데이트합니다.
문제 해결
문제 | 문제 해결 |
---|---|
오류 메시지: The slave is connecting ... master has purged
binary logs containing GTIDs that the slave requires . |
기본 Cloud SQL 인스턴스에는 자동 백업 및 바이너리 로그와 point-in-time recovery가 사용 설정되어 있으므로 복제본이 따라잡을 수 있을 만큼 충분한 로그가 있어야 합니다. 그러나 이 경우에는 바이너리 로그가 존재하더라도 복제본은 어떤 행부터 읽을지 알 수 없습니다.
올바른 플래그 설정을 사용하여 새 덤프 파일을 만들고 이 파일을 사용하여 외부 복제본을 구성합니다.
|
다음 단계
- 복제본 관리 방법 알아보기
- 외부 복제본의 요구사항 및 권장사항에 대해 알아보기
- MySQL 복제에 대해 자세히 알아보기
- 복제 옵션에 대해 자세히 알아보기
- 복제 상태 확인에 대해 자세히 알아보기
- 외부 서버에서 복제 자세히 알아보기