Document: https://dev.mysql.com/doc/refman/8.0/en/replication.html
Instance Name: mysql-ssr-source
OS: CentOS 7.9
MySQL: 5.7.42 (13306 port)
Instance Name: mysql-ssr-replica
OS: CentOS 7.9
MySQL: 5.7.42 (13306 port)
각 서버에 MySQL 5.7.42 버전을 설치하였습니다.
설치 방법 참고 👉 https://velog.io/@inhwa1025/과제-MySQL-자동-설치-스크립트-작성하기
Master 서버와 Slave 서버 모두 설정해줍니다.
my.cnf 에 아래 내용을 추가하여 한국표준시로 변경
[mysqld]
default-time-zone="+09:00"
[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 서버가 띄워져있음
mystatus-ssr-source 👉 Source(Master)
mystatus-ssr-replica 👉 Replica(Slave)
vi /home/centos/mysql/my.cnf
[mysqld]
server-id=2
my.cnf에 서버별로 다른 id를 지정하여야 합니다.
[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';
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)
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;