MariaDB 레플리케이션 비정상 복구

1 개요[ | ]

MySQL 레플리케이션 복구
MariaDB 레플리케이션 복구
MariaDB 레플리케이션 비정상 복구
  • MariaDB 레플리케이션 설정과 같이 마스터 1대, 슬레이브 2대가 있는데
  • 슬레이브 2대 모두 레플리케이션에 문제가 생긴 상황
  • ※ MySQL / MariaDB 동일함

2 확인[ | ]

root@slave1:~# mysql -u아이디 -p패스워드 -e 'SHOW SLAVE STATUS \G' | egrep "Master_Log_Pos|Running|IO_Err|SQL_Err"
          Read_Master_Log_Pos: 38125518
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
          Exec_Master_Log_Pos: 29972602
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 1062
               Last_SQL_Error: Error 'Duplicate entry '4273' for key 'PRIMARY'' on query. ... (생략)
→ 마스터는 38125518까지 가있는데, 슬레이브1은 29972602 지점에서 오류 발생
root@slave2:~# mysql -u아이디 -p패스워드 -e 'SHOW SLAVE STATUS \G' | egrep "Master_Log_Pos|Running|IO_Err|SQL_Err"
          Read_Master_Log_Pos: 38127230
             Slave_IO_Running: Yes
            Slave_SQL_Running: No
          Exec_Master_Log_Pos: 32908348
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 1062
               Last_SQL_Error: Error 'Duplicate entry '4832' for key 'PRIMARY'' on query. ... (생략)
→ 마스터는 38127230까지 가있는데, 슬레이브2는 32908348 지점에서 오류 발생

3 조치[ | ]

대략 MariaDB 레플리케이션 설정 문서 후반부의 슬레이브 설정부분을 다시 적용해주면 된다.

  • 슬레이브 중지 - 마스터 재설정 - 슬레이브 시작
STOP SLAVE;
CHANGE MASTER TO MASTER_HOST='마스터주소', MASTER_USER='레플리케이션계정', MASTER_PASSWORD='패스워드', MASTER_PORT=3306, MASTER_LOG_FILE='마스터로그파일', MASTER_LOG_POS=마스터로그포지션, MASTER_CONNECT_RETRY=10"
START SLAVE;

4 확인 2[ | ]

  • 아래와 같이 순식간에 정상화되었다.
root@slave1:~# mysql -u아이디 -p패스워드 -e 'SHOW SLAVE STATUS \G' | egrep "Master_Log_Pos|Running|IO_Err|SQL_Err"
          Read_Master_Log_Pos: 38144310
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
          Exec_Master_Log_Pos: 38144310
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error:

5 의견[ | ]

  • 마스터와 슬레이브 사이에 통신이 불안정해서 그런 것으로 추정됨
  • MASTER_CONNECT_RETRY를 늘려보면 어떨까? 10 → 60으로 변경해봄
  • Parallel_Mode를 바꿔보면 어떨까?
  • slave-skip-errors를 설정하는 방법도 있음

6 같이 보기[ | ]

문서 댓글 ({{ doc_comments.length }})
{{ comment.name }} {{ comment.created | snstime }}