3.7. MySQL 복제
MySQL 은 기본에서 고급까지 복제를 위한 다양한 구성 옵션을 제공합니다. 이 섹션에서는 GTID(Global transaction Identifiers)를 사용하여 새로 설치된 MySQL 서버에서 MySQL에서 복제하는 트랜잭션 기반 방법에 대해 설명합니다. GTID를 사용하면 트랜잭션 식별 및 일관성 확인이 간소화됩니다.
MySQL 에서 복제를 설정하려면 다음을 수행해야 합니다.
복제에 기존 MySQL 서버를 사용하려면 먼저 데이터를 동기화해야 합니다. 자세한 내용은 업스트림 문서 를 참조하십시오.
3.7.1. MySQL 소스 서버 구성
MySQL 소스 서버에 필요한 구성 옵션을 설정하여 데이터베이스 서버에서 수행된 모든 변경 사항을 올바르게 실행하고 복제할 수 있습니다.
사전 요구 사항
- 소스 서버가 설치되어 있어야 합니다.
절차
[mysqld]
섹션의/etc/my.cnf.d/mysql-server.cnf
파일에 다음 옵션을 포함합니다.bind-address=source_ip_adress
이 옵션은 복제본에서 소스로 구성된 연결에 필요합니다.
server-id=id
id 는 고유해야 합니다.
log_bin=path_to_source_server_log
이 옵션은 MySQL 소스 서버의 바이너리 로그 파일의 경로를 정의합니다. 예:
log_bin=/var/log/mysql/mysql-bin.log
.gtid_mode=ON
이 옵션을 사용하면 서버에서 글로벌 트랜잭션 식별자(GTID)를 사용할 수 있습니다.
enforce-gtid-consistency=ON
서버는 GTID를 사용하여 안전하게 로깅할 수 있는 문만 실행할 수 있도록 하여 GTID 일관성을 적용합니다.
Optional:
binlog_do_db=db_name
선택한 데이터베이스만 복제하려면 이 옵션을 사용합니다. 두 개 이상의 선택된 데이터베이스를 복제하려면 각 데이터베이스를 별도로 지정합니다.
binlog_do_db=db_name1 binlog_do_db=db_name2 binlog_do_db=db_name3
Optional:
binlog_ignore_db=db_name
복제에서 특정 데이터베이스를 제외하려면 이 옵션을 사용합니다.
mysqld
서비스를 다시 시작합니다.# systemctl restart mysqld.service
3.7.2. MySQL 복제본 서버 구성
MySQL 복제본 서버에 필요한 구성 옵션을 설정하여 복제를 성공적으로 수행할 수 있습니다.
사전 요구 사항
- 복제본 서버가 설치되어 있어야 합니다.
절차
[mysqld]
섹션의/etc/my.cnf.d/mysql-server.cnf
파일에 다음 옵션을 포함합니다.server-id=id
id 는 고유해야 합니다.
relay-log=path_to_replica_server_log
릴레이 로그는 복제 중에 MySQL 복제본 서버에서 생성한 로그 파일 집합입니다.
log_bin=path_to_replica_sever_log
이 옵션은 MySQL 복제본 서버의 바이너리 로그 파일에 대한 경로를 정의합니다. 예:
log_bin=/var/log/mysql/mysql-bin.log
.이 옵션은 복제본에 필요하지 않지만 강력히 권장됩니다.
gtid_mode=ON
이 옵션을 사용하면 서버에서 글로벌 트랜잭션 식별자(GTID)를 사용할 수 있습니다.
enforce-gtid-consistency=ON
서버는 GTID를 사용하여 안전하게 로깅할 수 있는 문만 실행할 수 있도록 하여 GTID 일관성을 적용합니다.
log-replica-updates=ON
이 옵션을 사용하면 소스 서버에서 수신한 업데이트가 복제본의 바이너리 로그에 기록됩니다.
skip-replica-start=ON
이 옵션을 사용하면 복제본 서버가 복제 서버가 시작될 때 복제 스레드를 시작하지 않습니다.
Optional:
binlog_do_db=db_name
특정 데이터베이스만 복제하려면 이 옵션을 사용합니다. 두 개 이상의 데이터베이스를 복제하려면 각 데이터베이스를 별도로 지정합니다.
binlog_do_db=db_name1 binlog_do_db=db_name2 binlog_do_db=db_name3
Optional:
binlog_ignore_db=db_name
복제에서 특정 데이터베이스를 제외하려면 이 옵션을 사용합니다.
mysqld
서비스를 다시 시작합니다.# systemctl restart mysqld.service
3.7.3. MySQL 소스 서버에서 복제 사용자 생성
복제 사용자를 생성하고 복제 트래픽에 필요한 이 사용자 권한을 부여해야 합니다. 다음 절차에서는 적절한 권한이 있는 복제 사용자를 만드는 방법을 설명합니다. 소스 서버에서만 이 단계를 실행합니다.
사전 요구 사항
- MySQL 소스 서버 구성에 설명된 대로 소스 서버가 설치되고 구성됩니다.
절차
복제 사용자를 생성합니다.
mysql> CREATE USER 'replication_user'@'replica_server_ip' IDENTIFIED WITH mysql_native_password BY 'password';
사용자 복제 권한을 부여합니다.
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication_user'@'replica_server_ip';
MySQL 데이터베이스에서 부여 테이블을 다시 로드합니다.
mysql> FLUSH PRIVILEGES;
소스 서버를 읽기 전용 상태로 설정합니다.
mysql> SET @@GLOBAL.read_only = ON;
3.7.4. 소스 서버에 복제본 서버 연결
MySQL 복제본 서버에서는 소스 서버의 자격 증명과 주소를 구성해야 합니다. 다음 절차에 따라 복제본 서버를 구현합니다.
사전 요구 사항
- MySQL 소스 서버 구성에 설명된 대로 소스 서버가 설치되고 구성됩니다.
- MySQL 복제본 서버 구성에 설명된 대로 복제본 서버가 설치되고 구성됩니다.
- 복제 사용자를 생성했습니다. MySQL 소스 서버에서 복제 사용자 생성을 참조하십시오.
절차
복제본 서버를 읽기 전용 상태로 설정합니다.
mysql> SET @@GLOBAL.read_only = ON;
복제 소스를 구성합니다.
mysql> CHANGE REPLICATION SOURCE TO -> SOURCE_HOST='source_ip_address', -> SOURCE_USER='replication_user', -> SOURCE_PASSWORD='password', -> SOURCE_AUTO_POSITION=1;
MySQL 복제본 서버에서 복제본 스레드를 시작합니다.
mysql> START REPLICA;
소스 및 복제본 서버 둘 다에서 읽기 전용 상태를 설정 해제합니다.
mysql> SET @@GLOBAL.read_only = OFF;
선택 사항: 디버깅 목적으로 복제본 서버의 상태를 검사합니다.
mysql> SHOW REPLICA STATUS\G;
참고복제본 서버가 시작하거나 연결하는 데 실패하면
SHOW MASTER STATUS
명령의 출력에 표시된 바이너리 로그 파일 위치에 따라 특정 이벤트 수를 건너뛸 수 있습니다. 예를 들어 정의된 위치에서 첫 번째 이벤트를 건너뛰십시오.mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
복제 서버를 다시 시작합니다.
선택 사항: 복제본 서버에서 복제본 스레드를 중지합니다.
mysql> STOP REPLICA;
3.7.5. 검증
소스 서버에서 예제 데이터베이스를 생성합니다.
mysql> CREATE DATABASE test_db_name;
-
test_db_name
데이터베이스가 복제본 서버에 복제되는지 확인합니다. 소스 또는 복제본 서버에서 다음 명령을 실행하여 MySQL 서버의 바이너리 로그 파일에 대한 상태 정보를 표시합니다.
mysql> SHOW MASTER STATUS;
소스에서 실행되는 트랜잭션에 대한 GTID 집합을 표시하는
Executed_Gtid_Set
열은 비어 있지 않아야 합니다.참고복제본 서버에서
SHOW SLAVE STATUS
를 사용할 때 동일한 GTID 세트가Executed_Gtid_Set
행에 표시됩니다.