mysql 리플리케이션 복구 방법

환경 : mysql 5.x 이상 버전
mysql : 마스터, 슬레이브 형태로 2중화 리플리케이션 구성된 상태

1. mysql 리플리케이션이란?

mysql 리플리케이션 복구, 복원하는 방법에 대해서 알아본다. 데이터량이 비교적 적고, 부하분산이 필요없는 서버들의 경우 mysql 리플리케이션을 구성하지 않는다.

엔진 또한 myisam 만으로도 충분히 서비스에 지장없이 운영할수있다. 일반 호스팅 사이트 가 대표적인 예다. 접속자가 많지 않으면서 많은 양의 사이트를 운영관리할경우 DB 1대에 충분히 운영할수있다.

하지만 오늘은 접속자가 많은 쇼핑몰 사이트 라든지, DB 커넥트 및 데이터 insert, select 가 많은 곳에서 부하분산을 하는 도중에 잘못된 query 문이 발생되어 리플리케이션이 중단되는 경우에 어떻게 대처해야되는지에 대해 알아보도록 한다.

2. 마스터가 종료되는 경우 ( 서버다운, DB리스타트)

마스터의 디비 reset master (근래 쌓여있는 로그들은 삭제)

연결된 모든 슬라브 재시작

slave stop (종료)->reset slave(근래 쌓여있는 로그들은 삭제)->slave start(시작)

3. 슬라브가 종료되는 경우 ( 서버다운, DB리스타트)

슬라브 재시작

slave stop (종료)->reset slave(근래 쌓여있는 로그들은 삭제)->slave start(시작)

4. 연결이 끊어진 경우 (보통 슬라브에서 에러)

1) master 재설정 없이 복구

Show slave status \G 문을 실행해서 일단 에러 메시지를 확인하고 따로 기록한다. position 값이 어디인지 중요하기 때문에 꼭 메모해야된다.

slave stop;
set global sql_slave_skip_counter=1;
slave start;
show slave status \G;

2) 재설정 이후 복구

1번째 방법은 master 와의 연결 재설정 없이 복구하는 방법이다. 대게 1번째 방법으로만으로도 충분히 해결이 가능하다. 하지만 많이 꼬여있는 상태일 경우 master 와의 연결설정값을 다시 재설정을 해야된다.

어느 bin-log 의 position 이 깨졌는지 정확하게 메모해둔다.

slave stop;
reset slave;

change master to master_host='192.168.0.9', master_user='repluser', master_port=3306, master_password='neulwonpassword', master_log_file='mysql-bin.000010', master_log_pos=1050;

start slave;
show slave status \G

5. 기타

1) 프로세스 종료문

kill 프로세서, kill -9 프로세스,kill –HUP 프로세스

주의! 이렇게 할경우 잘못하면 데이터가 손실될 우려가 발생될수있다. 극히 일부분이지만 정말 운이 없으면 생길수있으므로 주의가 필요.

2) 서버종료전 확인 해야 할 것

DB의 정상적인 종료 명령어 (mysqladmin shutdown –p ) 로 종료후 확인 할 것 ps -aux

reboot명령으로 서버를 재시동하지 말 것(/sbin/init 6문으로 재시작)

3) 데몬 실행순서

mysql->tomcat->apache(이와 같이 하는 이유는 메모리 의존도가 높은 데몬부터 실행을 해야하기 때문. 종료도 부팅순서와 동일

/usr/local/mysql/bin/mysqld_safe --user=mysql & <- mysql 실행
/usr/local/tomcat/bin/Catalina.sh start <- tomcat 실행
/usr/local/apache/bin/apachectl start <- apaehce 실행

댓글 남기기

이메일은 공개되지 않습니다. 필수 입력창은 * 로 표시되어 있습니다