'replication'에 해당되는 글 2건

[MySQL] Replication 마스터 동기화 쉘스크립트



리플리케이션 하다가 도중에 슬래이브 서버를 재시작 해야 하는 경우 마스터의 로그 파일의 포지션을 맞추는게 은근 짜증이 납니다.


DB를 멈춰 놓고 작업하면 느긋하게 해도 되지만 마스터 DB는 동작을 멈추면 안되는 경우엔 사용자가 없는 새벽시간을 이용해 작업하기도 그렇죠~


그래서 쉘스크립트로 마스터의 정보를 읽어와서 바로 CHANGE MSATER TO SQL을 실행하도록 해보았습니다.


#!/bin/sh


M_DB_HOST="MASTER서버"

M_DB_USER="리플리케이션유저아이디"

M_DB_PASS="리플리케이션유저비밀번호"

S_DB_USER="SLAVE루트아이디"

S_DB_PASS="SLAVE비밀번호"


MASTER_STATUS=(`mysql -h$M_DB_HOST -u$M_DB_USER -p$M_DB_PASS -e "SHOW MASTER STATUS" | grep -v "File"`)


SQL1="STOP SLAVE;"

SQL2="SET GLOBAL replicate_do_db = '동기화데이터베이스1,동기화데이터베이스2';"

SQL3="\

CHANGE MASTER TO \

MASTER_HOST='$M_DB_HOST', \

MASTER_USER='$M_DB_USER', \

MASTER_PASSWORD='$M_DB_PASS', \

MASTER_PORT=3306, \

MASTER_LOG_FILE='${MASTER_STATUS[0]}', \

MASTER_LOG_POS=${MASTER_STATUS[1]}; \

"

SQL4="START SLAVE;"


mysql -u$S_DB_USER -p$S_DB_PASS -e "$SQL1"

mysql -u$S_DB_USER -p$S_DB_PASS -e "$SQL2"

mysql -u$S_DB_USER -p$S_DB_PASS -e "$SQL3"

mysql -u$S_DB_USER -p$S_DB_PASS -e "$SQL4"


색깔이 있는 부분은 자신의 환경에 맞게 고쳐야 합니다.


응용하시면 됩니다.



mysql-replication.sh.txt


스크립트파일도 첨부하였습니다.


기존 데이터 백업은 https://ivps.tistory.com/607 여기를 참고하세요~




REPLICATION 유저로 SHOW MASTER STATUS 시 권한을 따로 주어야 합니다.


GRANT REPLICATION CLIENT ON *.* TO '유저아이디'@'%' IDENTIFIED BY '비밀번호';


블로그 이미지

iVPS 영은파더♥

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

댓글을 달아 주세요

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

댓글을 달아 주세요