mysql replication 도중 slave 문제로 복구할때 master중지 없이 slave 복구하기 Server EDIT

서버세팅관련 복습 차원에서 내용작성   


mysql replication 으로 세팅해서 마스터1대와 슬레이브3대로 구성해서 운영을 하던중에..


slave 한대가 완전히 맞이 가버려서 싹 밀고 운영체제부터 새로 세팅한다음에


slave 세팅해서 최초 로그파일부터 해서 동기화를 시켜놓고 퇴근했다가 담날 출근했는데..


더 이상 데이터동기화가 안되고 있는 머같은 상황 발견..ㅡ.ㅡ;;


왜 이러지 하고 mysql 재시작도 해보고 재부팅도 해보고... 에러 로그도 살펴보다가 발견한건...


하드 용량부족...에라이..ㅡ.ㅡ;; 1년동안 마스터에 쌓인 로그를 하나도 안지웠더니.. 그걸 다 가져다가 동기화를 시키다 보니


하드공간이 택도 없이 부족한...쿨럭...


그래서 방법이 없을까 고민하던 와중에... 구글신에 도움으로.. 아래와 같은 방법 발견...


1. Master 데이터베이스에서 POSITION 번호가 같이 기록되도록 덤프 실시
# mysqldump -uroot -p --master-data=2 디비명 > backup.sql

2. Slave 데이터베이스에서 Replication 중지 후 데이터베이스 삭제
sql> STOP SLAVE;
sql> DROP DATABASE 디비명;
sql> CREATE DATABASE 디비명;

3. 마스터에서 덤프뜬파일로 Slave 데이터베이스에 복구
# mysql -uroot -p 디비명 < backup.sql

 4. 마스터에서 덤프뜬 백업파일에서 다음 줄 찾기
-- CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000025', MASTER_LOG_POS=1824765;
위 값에서 마스터 로그 파일과 마스터 로그 포지션을 확인할 수 있음

5. Slave 데이터베이스에서 다음 명령 실행
sql> CHANGE MASTER TO  MASTER_HOST='마스터아이피', MASTER_USER='유저', MASTER_PASSWORD='비밀번호', MASTER_LOG_FILE='바이너리로그파일명', MASTER_LOG_POS=마스터_포지션넘버;
sql> START SLAVE UNTIL MASTER_LOG_FILE='바이너리로그파일명', MASTER_LOG_POS=마스터_포지션넘버;
sql> START SLAVE;

6. 확인
Master 데이터베이스에서 다음과 같이 확인
sql> SHOW MASTER STATUS;

Slave 데이터베이스에서 다음과 같이 확인
sql> SHOW SLAVE STATUS;
혹은
sql> SHOW SLAVE STATUS \G


위와 같이 하고 slave가 정상적으로 돌아가면 그때 실서비스로 투입하면 만사 오케이...ㅡ.ㅡ;;


위와 같은 방식을 두번 사용하게 되었는데 한번은 위처럼 하드공간이 부족해서 덤프뜨고 복구할때 사용하고...


한번은 이제 마스터에 있는 바이너리로그를 좀 정리해야할 상황이 되서..(하드 부족...ㅡ.ㅡ;;) 로그를 10일치만 두고 다 지웠는데..


그리고 한 3달뒤에 slave를 하나 더 추가해야할 상황이 되서.. 그때도 위와같은 방법으로 slave 동기화 하고 실 서비스 투입합...



Share
이 글과 관련된 글
  1. [2012/02/10] [Linux] 리눅스 서버 tech & tip by 곰이아빠 (50)
  2. [2012/02/04] 안전보건공단 2012년 1월 산재예방 달인 by Creativity, Safety, and Life (273)
  3. [2012/02/04] 안전보건공단 2011년 12월 산재예방 달인 by Creativity, Safety, and Life (271)
  4. [2012/01/31] [MySQL] 관리자 root 의 password 재세팅 by 곰이아빠 (109)
  5. [2012/01/31] [Linux] Admin Part II - FTP & DB 유저생성,권한설정 by 곰이아빠 (107)
tags

Leave Comments



T-NAVI