mysql replication 도중 slave 문제로 복구할때 master중지 없이 slave 복구하기 Server EDIT
by , 2011.09.07 17:42, 0 Comments, 0 Trackbacks
서버세팅관련 복습 차원에서 내용작성
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 동기화 하고 실 서비스 투입합...
- [2012/02/10] [Linux] 리눅스 서버 tech & tip (50)
- [2012/02/04] 안전보건공단 2012년 1월 산재예방 달인 (273)
- [2012/02/04] 안전보건공단 2011년 12월 산재예방 달인 (271)
- [2012/01/31] [MySQL] 관리자 root 의 password 재세팅 (109)
- [2012/01/31] [Linux] Admin Part II - FTP & DB 유저생성,권한설정 (107)
- tags
- mysql , replication , mysql replication , master , slave , 복구

당신이 살고있는 오늘은 어제 죽어간 이가 그토록 바라던 내일이다 