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 여기를 참고하세요~



블로그 이미지

iVPS 영은파더♥

가상서버호스팅 VPS 리눅스 서버관리 윈도우 IT

댓글을 달아 주세요