[MySQL][Master-Slave] GTID를 이용한 복제 - 구성방법

■ GTID 이용한 복제 설정.

여기에서는 처음으로 GTID 이용하여 처음 설정하는 "콜드 스타트"방법입니다. 포스트를 통해서 복제를 어떻게 설정하고, 주의할점은 무엇인지 알아봅니다.

 

서버준비

가능하면 같은 사양의 물리서버를 준비합니다. 그리고 같은 버전의 MySQL 설치합니다. 여기에서는 5.7 위주로 설명을 합니다.

다음의 환경으로 설정되어 있다고 가정합니다.

서버 IP MySQL Version
마스터 192.168.0.101 5.7
슬레이브 192.168.0.102 5.7

 

파라미터 설정

마스터 슬레이브 서버 모두에 다음의 파라미터를 설정합니다.

 

서버별 설정할 파라미터

mysqld 섹션에 작성합니다.

[mysqld]
server-id=1
log-bin=binlog
gtid-mode=ON
enforce-gtid-consistency=ON
log_slave_updates=ON

 

파라미터 설명

server-id : 서버별로 다르게 설정합니다. 여기의 예제에서는 master서버는 1, Slave서버는 2 설정합니다. 서버마다 번호만 다르면 됩니다.

bin-log : 바이너리 로그 디렉토리 바이너리 로그 이름입니다.

gtid-mode=ON : GTID 모드 설정한다는 의미입니다.

log_slave_updates=ON : 복제본 서버가 소스 서버에서 수신한 업데이트를 복제본의 자체 바이너리 로그에 기록해야 하는지 여부를 나타냅니다.

옵션을 활성화하면 A->B->C 복제환경에서 B서버가 C서버의 마스터 역활도 할수가 있게 됩니다.

 

위의 파라미터 설정 MySQL서버를 재시작합니다.

 

복제 유저 설정

replcation 권한을 가지는 복제전용 유저를 마스터 서버에서 생성합니다. 슬레이브에서 유저를 이용해 마스터에 붙어서 바이너리 로그파일을 읽어온다.

그리고 읽어온 로그 파일의 내용을 슬레이브에 적용한다.

 

유저 생성

//IP 입력란에 Slave IP 입력
mysql> CREATE USER 'repl'@'192.168.0.102' IDENTIFIED BY 'password';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'192.168.0.102';

 

복제 설정을 위한 데이터 덤프 생성 데이터 전송 데이터 전송

복제 설정을 위해 마스터에서 데이터를 덤프 슬레이브로 해당 덤프를 전송합니다.

 

데이터 덤프

shell> mysqldump -uroot -p'root암호' -v --all-databases \
--single-transaction --routines --set-gtid-purged=ON \
--triggers --extended-insert --master-data=2  | gzip > db_dump.tar.gz

 

데이터 전송

덤프한 데이터를 슬레이스 서버로 이동. SSH NFS, FTP등의 방법을 이용하여 슬레이브 서버로 데이터 전송.

 

데이터 로드 복제 설정

슬레이브 서버에서 해당 명령들을 실행합니디.

 

데이터 로드전 사전 작업 사항

슬레이브에서 기존 GTID정보를 가지게 될경우 데이터 중복이나 복제 환경이 깨지게 됩니다. 반드시 기존 GTID정보를 가지고 있는지 반드시 확인합니다.

만약 값을 가지고 있다면 아무런 값을 가지지 않도록 초기화 시킵니다.

 

- GTID 실행 여부

mysql> show global variables like 'gtid_executed';
+-----------------+-------------------------------------------------------+
| Variable_name   | Value                                                 |
+-----------------+-------------------------------------------------------+
| gtid_executed   | 027f123c-51b5-22ef-eeb3-225056ac2425:1-1322           |
+-----------------+-------------------------------------------------------+
1 row in set (0.01 sec)

 

- GTID 퍼지 여부

mysql> show global variables like 'gtid_purged';
+-----------------+-------------------------------------------------------+
| Variable_name   | Value                                                 |
+-----------------+-------------------------------------------------------+
| gtid_purged     | 019f728c-52b5-11ea-aeb3-005056ac2425:1-1520           |
+-----------------+-------------------------------------------------------+

 

- 글로벌 GTID 확인

초기 MySQL 설치되면 이곳에 GTID값이 설정된다.

여기서 반드시 아무런 내용도 나오지 않아야 한다.

mysql> select @@global.gtied_executed;
+----------------------------------------+
| @@global.gtid_executed                 |
+----------------------------------------+
| 600e251b-eca7-11ec-9d02-3cecef806a9e:1 |
+----------------------------------------+
mysql> select @@global.gtied_purged;
+-----------------------+
| @@global.gtied_purged |
+-----------------------+
|                       |
+-----------------------+

 

- 마스터 초기화

위의 gtid 삭제 초기화를 위해 반드시 수행

reset master;

 

- GTID 실행 여부 확인. 아무런 데이터도 없어야

mysql> show global variables like 'gtid_executed';
+-----------------+-------------+
| Variable_name   | Value       |
+-----------------+-------------+
| gtid_executed   |             |
+-----------------+-------------+
1 row in set (0.00 sec)

 

- GTID 퍼지 여부 확인. 아무런 데이터도 없어야 .

mysql> show global variables like 'gtid_purged';
+-----------------+-------------+
| Variable_name   | Value       |
+-----------------+-------------+
| gtid_purged     |             |
+-----------------+-------------+
1 row in set (0.00 sec)

 

데이터 로드

슬레이브에서 수행합니다.

shell> gunzip db_dump.tar.gz
shell> mysql -uroot -p'root암호' < db_dump.sql

 

복제 설정

슬레이브에서 해당 명령어를 실행합니다.

mysql> CHANGE MASTER TO MASTER_HOST='Master_Server_IP', \
MASTER_USER='repl', \
MASTER_PASSWORD='repl암호', \
MASTER_PORT=3306, \
MASTER_AUTO_POSITION=1;

 

복제 시작

mysql> start slave;

참고로 MySQL 8.0 이상일때는 start replica 명령으로 대신합니다.

MySQL 8.0에서 복제 명령어가 몇개 바뀌었는데 그것은 아래에 설명합니다.

 

데이터 복제 여부 확인.

아래 간단한 쿼리를 실행하여 복제에 참여한 슬레이브 서버가 복제가 되는지 확인.

- 마스터 서버에서 실행

mysql> create database repldb;
mysql> use repldb;
mysql> create table t1(c1, char(10), char(20), char(3)
mysql> insert into t1 values('1','2','3';

 

 

■ MySQL 8.0 복제 명령어 변경사항

MySQL 8.0에서는 다음과 같이 명령어가 변경되었습니다.

변경전 명령어 변경후 명령어
START SLAVE START REPLICA
STOP SLAVE STOP REPLICA
SHOW SLAVE STATUS SHOW REPLICA STATUS
SHOW SLAVE HOSTS SHOW REPLICAS
RESET SLAVE RESET REPLICA
CHANGE MASTER TO CHANGE REPLICATION SOURCE TO
MASTER_HOST, MASTER_PORT SOURCE_HOST,SOURCE_PORT
MASTER_LOG_POS SOURCE_LOG_POS
MASTER_LOG_FILE SOURCE_LOG_FILE

댓글(0)

Designed by JB FACTORY