And Brain said,

MySQL Replication, DB must go on 본문

IT/Database

MySQL Replication, DB must go on

The Man 2023. 9. 18. 17:42
반응형

https://theworldaswillandidea.tistory.com/100

 

DB Clustering & Replication, DB must go on

서비스의 심장과도 같은 Database가 멈춘다면 어떻게 될까? 당연히 서비스는 제 기능을 하지 못할 것이고 멈춰있는 시간동안 서비스 기능 장애 뿐만 아니라, 데이터 손실 등의 문제에 직면하게 된

theworldaswillandidea.tistory.com

 
오래전에 한 번 이론 상 다뤄본 적이 있었지만, 오늘은 실제로 적용해보도록 하겠습니다. DB는 계속되야만 합니다. MySQL의 Replication 방식 시작해봅시다.
 
 
먼저, Master DB가 될 녀석의 데이터를 백업해둡시다. 그 전에, 안전하게 Master DB의 읽기 작업을 잠시 중단시키는 것이 좋습니다.

mysql -u root -p -e 'FLUSH TABLES WITH READ LOCK; SHOW MASTER STATUS;'

 
다음으로, 덤프를 진행.

mysqldump -u root -p --all-databases --master-data > master_data.sql

 
이제 다시, 읽기 잠금을 해제합시다.

mysqldump -u root -p --all-databases --master-data > master_data.sql

 
데이터는 복제해뒀으니 본격적으로, Slave를 만들 것입니다. my.cnf 혹은 my.ini에 다음의 설정을 추가한 후 재시작 해줍니다.

[mysqld]
server-id=1
log-bin

 
이제, 노예를 만듭시다.

CREATE USER '노예이름'@'%' IDENTIFIED BY 'password';
GRANT REPLICATION SLAVE ON *.* TO '노예이름'@'%';

 
여러분들이 원하는 노예의 이름을 정해주시면 됩니다.
 
 
이제 Slave가 될 녀석에게 데이터를 복원해놓을 겁니다. 이 경우에는 Slave의 기본적인 Database를 제외한 모든 데이터를 지우는게 좋습니다. 백업을 해두시는 것을 추천드립니다.

scp master_data.sql user@slave_ip:/path/to/

 
scp나 rsync와 같은 도구를 사용하시든 어떤 방식으로든 Slave 서버에 데이터를 복사하시고,

mysql -u root -p < /path/to/master_data.sql

 
이렇게 덤프된 데이터를 Slave DB에 집어넣습니다.
 
다음으로, 마찬가지로 my.cnf 혹은 my.ini 에 다음의 설정을 추가한 후, 재시작 후 mysql을 재시작해줍시다.

[mysqld]
server-id=2

 
이제 MySQL CLI에서 다음의 명령어를 각각 입력해주면 간단하게 노예를 하나 장만하실 수 있습니다.

CHANGE MASTER TO 
MASTER_HOST='master_ip_address',
MASTER_USER='주인이름',
MASTER_PASSWORD='password',
MASTER_LOG_FILE='recorded_log_file',
MASTER_LOG_POS=recorded_log_position;

START SLAVE;

 
주의하셔야할 점은, 레플리카(Replica)는 마스터와 데이터 동기화가 중요합니다. 쓰기 작업은 마스터에서 하시고 레플리카는 주로 읽기 작업, 그리고 고가용성 및 데이터 백업 용도로 사용하시길 바랍니다.
 
 

Thanks for watching, Have a nice day.

반응형
Comments