[MySQL] 복제 환경 구축하기 MySQL Replication

hwwwa·2023년 6월 26일
0

일반 복제 환경 구축

Document: https://dev.mysql.com/doc/refman/8.0/en/replication.html

개발 환경

  • NHN Cloud
    • CentOS 7.9
  • MySQL 5.7.42

DB 서버 정보

Master

Instance Name: mysql-ssr-source
OS: CentOS 7.9
MySQL: 5.7.42 (13306 port)

Slave

Instance Name: mysql-ssr-replica
OS: CentOS 7.9
MySQL: 5.7.42 (13306 port)

각 서버에 MySQL 5.7.42 버전을 설치하였습니다.

설치 방법 참고 👉 https://velog.io/@inhwa1025/과제-MySQL-자동-설치-스크립트-작성하기

MySQL 설정

Master 서버와 Slave 서버 모두 설정해줍니다.

  • 타임존 설정

my.cnf 에 아래 내용을 추가하여 한국표준시로 변경

[mysqld]
default-time-zone="+09:00"
  • 바이너리 로그 및 슬로우 쿼리 로그 설정
    바이너리 로그 및 슬로우 쿼리 로그 사용 설정, 슬로우 쿼리 기준 1초로 설정
[mysqld]
log-bin=/home/centos/mysql/data/binlog
log-bin-index=/home/centos/mysql/data/binlog.index
slow-query-log=1
long-query-time=1
log-output=TABLE

적용이후 mysql 서비스를 재시작

MySQL Replication 구성

인스턴스별로 MySQL 서버가 띄워져있음
mystatus-ssr-source 👉 Source(Master)
mystatus-ssr-replica 👉 Replica(Slave)

  • 버전 : 5.7.42

Master 파라미터 설정

vi /home/centos/mysql/my.cnf

[mysqld]
server-id=2

my.cnf에 서버별로 다른 id를 지정하여야 합니다.

Slave 파라미터 설정

[mysqld]
server-id=21
read-only

적용을 위해 MySQL을 재시작한다.

/home/centos/mysql/bin/mysqld --defaults-file=/home/centos/mysql/my.cnf &

복제 전용 유저 생성

Master에 복제를 위한 권한을 설정한다. 복제를 위한 REPLICATION SLAVE 권한을 부여한다.

mysql> CREATE USER 'repl'@'%' IDENTIFIED BY 'replica!@#123';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

비밀번호 체계를 이전처럼 환경설정

ALTER USER 'repl'@'%' IDENTIFIED WITH mysql_native_password BY 'replica!@#123';

Log 파일과 Position 확인

Master 서버에서 Log 파일명과 Position 정보를 확인한다.

mysql> SHOW MASTER STATUS\G
*************************** 1. row ***************************
             File: binlog.000001
         Position: 154
     Binlog_Do_DB:
 Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)

mysqldump를 사용하여 데이터 스냅샷 생성

Master 서버에서 mysqldump를 사용하여 데이터 스냅샷 생성

$ mysqldump  -u root --all-databases  --master-data > dbdump.db

slave 서버에 데이터 스냅샷 파일을 전송하고 데이터 적용

$ mysql/bin/mysql -u root < dbdump.db

바이너리 로그 기반 복제 소스 추가

CHANGE REPLICATION MASTER TO 명령어로 bin 로그 기반의 복제를 진행하기 위해 Slave에 Master에 대한 복제 구성
Host 주소, Port, 권한 정보, Log 파일 명, Log 파일 Position의 정보를 입력

mysql> CHANGE MASTER TO MASTER_HOST="***.**.**.**", MASTER_PORT=13306, MASTER_USER="repl", MASTER_PASSWORD="replica!@#123", MASTER_LOG_FILE="binlog.000001", MASTER_LOG_POS=154;

복제 시작

START SLAVE 명령어로 복제를 시작

mysql> START SLAVE;

SHOW SLAVE STATUS 명령어를 실행하여 두 채널이 모두 시작되었고 올바르게 작동하는 지 확인

mysql> show slave status\G
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: ***.**.**.**
                  Master_User: repl
                  Master_Port: 13306
                Connect_Retry: 60
              Master_Log_File: binlog.000001
          Read_Master_Log_Pos: 154
               Relay_Log_File: mysql-ssr-replica-relay-bin.000002
                Relay_Log_Pos: 317
        Relay_Master_Log_File: binlog.000001
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB:
          Replicate_Ignore_DB:
           Replicate_Do_Table:
       Replicate_Ignore_Table:
      Replicate_Wild_Do_Table:
  Replicate_Wild_Ignore_Table:
                   Last_Errno: 0
                   Last_Error:
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 154
              Relay_Log_Space: 539
              Until_Condition: None
               Until_Log_File:
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File:
           Master_SSL_CA_Path:
              Master_SSL_Cert:
            Master_SSL_Cipher:
               Master_SSL_Key:
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error:
               Last_SQL_Errno: 0
               Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
             Master_Server_Id: 2
                  Master_UUID: 48adc8ff-09be-11ee-a759-fa163ebd7063
             Master_Info_File: /home/centos/mysql/data/master.info
                    SQL_Delay: 0
          SQL_Remaining_Delay: NULL
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates
           Master_Retry_Count: 86400
                  Master_Bind:
      Last_IO_Error_Timestamp:
     Last_SQL_Error_Timestamp:
               Master_SSL_Crl:
           Master_SSL_Crlpath:
           Retrieved_Gtid_Set:
            Executed_Gtid_Set:
                Auto_Position: 0
         Replicate_Rewrite_DB:
                 Channel_Name:
           Master_TLS_Version:
1 row in set (0.00 sec)

복제 중지

STOP SLAVE 명령어로 복제 구성을 중지할 수 있다.

mysql> STOP SLAVE;

복제 재설정

RESET SLAVE 명령어로 복제 구성을 재설정할 수 있다.

mysql> RESET SLAVE;

0개의 댓글