Load To Technical Architect
[Linux] Mysql Replication 본문
Version
- Mysql 5.7.20
Mysql Replication이란?
- 물리적으로 서로 다른 Mysql Server가 네트워크 연결을 통해 binlog를 기반으로 데이터를 실시간으로 복제하는 기능
- DB Server를 두 대를 두고 각각 MASTER DB, SLAVE DB로 명명, Mysql Replication 기능을 사용하면 MASTER DB에서의 INSERT UPDATE 등이 MASTER DB 뿐 아니라 SLAVE DB에도 똑같이 실시간으로 적용 됨
- Mysql Replication 동기화 방식으로는 비동기, 반동기 방식이 있음
@ 비동기 방식
MASTER DB는 SLAVE DB가 복제를 했는지 상태 확인을 하지지 않음
즉, MASTER DB에서의 작업에 거의 영향을 끼치지 않음
하지만 잠시라도 네트워크 장애가 발생한다면 MASTER DB와 SLAVE DB의 데이터가 달라짐
@ 반동기 방식
MASTER DB는 SLAVE DB가 복제를 했는지 상태를 확인
(단, relay log 파일에 기록했는지 까지만)
동기화 작업이 있으므로 비동기 방식보다는 MASTER DB에서의 작업에 영향이 생김
하지만 단시간 일어난 네트워크 장애가 발생해도 MASTE DB에서 SLAVE DB의 복제 상태가 확인이 안되기 때문에
작업이 일정시간 블록킹 되어 데이터의 차이가 생기지 않음
(장기간 네트워크 장애가 일어난다면 데이터 차이가 생김, 설정을 통해 복제 상태의 대한 응답을 기다리는 시간을 조절 가능)
- 본 글은 비동기 방식 구성
1. Master DB 세팅
1) my.cnf 수정
$ sudo vi /etc/my.cnf
[mysqld]
log-bin=/usr/local/mysql/mysql_data/mysql-bin
server-id=1
※ server-id는 같을 수 없음
2) Mysql 재시작
$ sudo systemctl restart mysql
3) Replication을 위한 계정 생성
$ mysql -u root -p
mysql> GRANT REPLICATION SLAVE ON *.* TO 'ID'@'%' IDENTIFIED BY 'PASSWORD';
4) Session Lock (데이터 백업을 위한 쓰기 금지)
mysql> FLUSH TABLES WITH READ LOCK;
5) 데이터베이스 백업
$ mysqldump --single-transaction -u root -p --all-databases > DBbackup.sql
6) Master 상태 확인
mysql> SHOW MASTER STATUS;
# File, Position 확인
2. Slave DB 세팅
1) my.cnf 수정
$ sudo vi /etc/my.cnf
[mysqld]
server-id=2
read_only=1
2) Mysql 재시작
$ sudo systemctl restart mysql
3) Master에서 백업 시킨 데이터베이스를 Slave에 적용
$ mysql -u root -p < DBbackup.sql
4) Slave 설정
mysql> CHANGE MASTER TO MASTER_HOST='master IP', MASTER_USER='Replication ID', MASTER_PASSWORD='password', MASTER_PORT=3306, MASTER_LOG_FILE='show master status file', MASTER_LOG_POS='show master status position';
5) Slave 시작
mysql> START SLAVE;
6) Slave 상태 확인
mysql> SHOW Slave STATUS\G;
# Error가 없어야 함
@ Last_IO_Errno: 2003
Last_IO_Error: error connecting to master 'X.X.X.X' - retry-time: 60 retries: 1
# 위와 같은 Error는 방화벽 문제이거나 Master Ip를 잘못 적은 경우임
3. Master DB 세팅
1) Lock 해제
mysql> UNLOCK TABLES;
Replication 설정 완료, Master DB에서 작업을 해보면 Slave DB에 실시간으로 똑같이 적용되는 것을 확인 가능
'DB > mysql' 카테고리의 다른 글
[Linux] Mysql Federated (0) | 2020.06.16 |
---|---|
[Linux] Mysql Tomcat 연동 (2) | 2020.06.15 |
[Linux] Mysql Service 등록 (0) | 2020.06.11 |
[Linux] Mysql 5.7.20 Compile (0) | 2020.06.11 |