And Brain said,
MySQL Replication, DB must go on 본문
https://theworldaswillandidea.tistory.com/100
오래전에 한 번 이론 상 다뤄본 적이 있었지만, 오늘은 실제로 적용해보도록 하겠습니다. 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.
'IT > Database' 카테고리의 다른 글
MongoDB, NoSQL의 거대한 수장 (Version 6.0) | 설치 및 외부접속 허용 (0) | 2023.08.07 |
---|---|
DB Clustering & Replication, DB must go on (0) | 2023.01.01 |
[MongoDB] mongoose를 이용한 $avg (aggregation) / group by (0) | 2022.10.25 |
데이터베이스야, 이리오너라! [Database, DB] (1) | 2022.07.26 |