MySQL Replication 설정 방법
리플리케이션은 DB 데이터를 이중으로 동기화를 원할 때 사용할 수 있습니다.
Master 서버가 오류가 발생할 경우를 대비하는 경우에 사용하는데 아무래도 정기적인 백업 보다는 실시간 백업이 더 낫지 않을까 생각 합니다.
파일 동기화는 https://ivps.tistory.com/150 여기를 참고하세요.
이제 Replication 설정 방법에 대해서 알아보겠습니다.
▶ Master 서버 환경설정 ( /etc/my.cnf 수정 )
[mysqld]
log-bin=mysql-bin
server-id=1
binlog_do_db=database1
binlog_do_db=database2
log-bin=mysql-bin
server-id=1
이렇게만 있어도 상관이 없습니다.
binlog_do_db 옵션은 Slave 에서 replicate_do_db 로 설정이 가능합니다.
▶ Master 서버 DB 재시작
my.cnf 파일의 옵션이 변경된 경우에 재시작을 해주어야 하지만,
Replication 설정과 상관없이 기존의 설정값이 log-bin, server-id 값이 이미 있을 겁니다.
이런 경우에는 DB 재시작을 할 필요가 없습니다.
▶ Master 서버 Replication 유저 추가
GRANT REPLICATION SLAVE ON *.* TO '유저아이디'@'%' IDENTIFIED BY '비밀번호';
Slave 서버에서 접속할 아이디를 생성하면 됩니다.
% 는 Slave 서버 IP 를 넣으면 보안에 더 좋겠지요.
▶ Master 서버 데이터 복사
FLUSH TABLES WITH READ LOCK;
# mysqldump -h마스터IP -uroot -p비밀번호 데이터베이스명 > backup.sql
# mysql -h슬래이브IP -uroot -p비밀번호 데이터베이스명 < backup.sql
UNLOCK TABLES;
운영중인 서버라면 테이블락을 걸어주어야 합니다.
그리고 Replication 이 동작중인 상태에서, 아래 과정을 다 거친 후에 나중에 데이터를 복제하여도 됩니다.
단, 빈 테이블이라도 있어야 합니다.
▶ Master 서버 File 및 Position 값 알아내기
SHOW MASTER STATUS;
윗 단계에서 데이터가 새로 갱신되지 않은 상태에서 확인하여야 합니다.
▶ Slave 서버 환경설정 ( /etc/my.cnf 수정 )
[mysqld]
log-bin=mysql-bin
log-slave-updates=1
server-id=2
replicate_do_db=database1
slave-skip-errors=1062
log-slave-updates 는 슬래이브면서 마스터인 경우에 값을 1을 주면 됩니다. 그냥 슬래이브라면 log-bin, log-slave-updates 는 없어도 됩니다.
server-id 는 슬래이브 서버 유니크한 번호입니다. 여러개의 슬래브 구성이라면 거기에 맞게 변경하면 됩니다.
replicate_do_db 는 동기화 시킬 데이터베이스명 입니다. 여러개라면 다음 줄에 계속해서 추가하거나 콤마로 구분해서 나열하면 됩니다.
여러개의 database 를 동기화 시켜야 한다면 이 옵션을 생략하면 됩니다.
이 외에도 아래의 옵션을 줄 수 있습니다.
replicate_ignore_db 제외할 database를 지정할 수 있습니다.
replicate_do_table 동기화 시킬 테이블을 지정할 수 있습니다.
replicate_ignore_table 제외할 테이블을 지정할 수 있습니다.
replicate_wild_do_table 동기화 시킬 테이블을 지정할 수 있습니다. 예) replicate_wild_do_table=database1.%
replicate_wild_ignore_table 제외할 테이블을 지정할 수 있습니다. 예) replicate_wild_ignore_table=database1.%
slave-skip-errors=1062 Error Duplicate entry 에러시 스킵하는 옵션입니다.
▶ Slave 서버 DB 재시작
리눅스 버전마다 다르겠지만
service mysqld restart 또는 systemctl restart mariadb
▶ Slave 서버 Master 정보 설정
CHANGE MASTER TO
MASTER_HOST='마스터IP',
MASTER_USER='유저아이디',
MASTER_PASSWORD='비밀번호',
MASTER_PORT=3306,
MASTER_LOG_FILE='File값',
MASTER_LOG_POS=Position값,
MASTER_CONNECT_RETRY=30;
my.cnf 에서 설정할 수 있지만 change master to 명령어로 설정이 가능합니다.
MASTER_HOST 는 마스터 서버의 IP값을 입력하면 됩니다.
MASTER_USER 와 MASTER_PASSWORD 는 3번째 단계에서 생성한 Replication 유저 아이디와 비밀번호를 입력하면 됩니다.
MASTER_LOG_FILE 과 MASTER_LOG_POS 는 SHOW MASTER STATUS 에서 확인한 File 값과 Position 값을 입력하면 됩니다.
MASTER_CONNECT_RETRY 는 커넥션 실패시 몇 초 후에 재시도 하는 값입니다.
▶ Slave 서버 Replication 시작
START SLAVE;
위의 과정에서 변동이 있으면 STOP SLAVE 를 실행한 다음 CHANGE MASTER TO 설정을 다시 해주고 START SLAVE 해주어야 합니다.
▶ Replication 동작 확인
SHOW SLAVE STATUS;
show master status 와 반대로 show slave status 로 슬래이브 상태를 확인할 수 있습니다.
마스터 DB 는 재시작 되더라도 SLAVE 서버는 다시 맞춰주는 작업이 필요가 없습니다.
하지만 슬래이브 DB 가 재시작 되면 마스터 DB 와 다시 싱크도 맞춰주어야 하고 위의 CHANGE MASTER TO 설정도 필요합니다.
싱크 맞추는 쉘스크립트는 https://ivps.tistory.com/606 여기를 참고하세요~
'IT이야기' 카테고리의 다른 글
웨일브라우저 캐시폴더 램디스크에 지정 (0) | 2017.04.07 |
---|---|
네이버 웨일브라우저 간단 사용기 (0) | 2017.03.15 |
KISA 인터넷진흥원 웹취약점 점검 (0) | 2017.03.09 |
MySQL mysqldump where option 백업받기 (0) | 2017.03.08 |
윈도우에서 리눅스 에뮬레이터 Cygwin (0) | 2017.03.08 |