2015.09.09 13:51
mysql replicaton을 이용해서 메인 DB서버(master)의 데이터를 백업 DB서버(slave)로 실시간으로 백업을 하고 있습니다.
그런데 백업이 잘 되다가 어느 순간부터 master db 데이터가 slave db에 반영되지 않는 경우가 발생하는 경우가 생길 시,
[SLAVE DB]
# slave db에서 현재 상태를 확인합니다.
mysql> show slave status;
slave db에서 에러가 발생했다면 Read_Master_Log_Pos값과 Exec_masterlog_pos값이 다르며 에러 내용은 Last Errono와 Last_error 값으로 확인할 수 있습니다. 또한 Slave_IO_Running, Slave_SQL_Running 값이 모두 Yes 이어야 합니다.
쿼리문으로 인해 발생한 에러이고 해당 쿼리문을 확인해 보니 무시할 수 있다면 해당 쿼리문이 실행된 포지션(postion)을 강제로 건너띄면 그 다음 포지션부터 slave db에 그동안 쌓인 데이터가 반영됩니다.
참고> 에러가 발생해서 slave db에 반영되지 않았더라도 master db 데이터는 계속 쌓입니다.
참고> master db 현재 상태 확인하기
[MASTER DB]
mysql> show master status;
master, slave db 상태가 일치해야합니다.
[master] = [slave]
File = Master_Log_File
Postion = Read_Master_Log_Pos
# 먼저 리플리케이션을 멈춘다.
- slave db 서버를 멈춰도 master db 데이터는 계속 쌓이며 다시 실행하게 되면 그동안 쌓인 데이터가 slave db에 반영이 됩니다.
mysql> stop slave;
# 에러가 발생한 쿼리문을 1개 건너 뜁니다.(error가 여러 개이면 그만큼 반복 실행해서 에러가 난 쿼리문을 건너뛰게됩니다.)
mysql> SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
# 리플리케이션을 시작한다.
mysql> start slave;
위처럼 실행하게되면 그동안 쌓여있던 데이터들이 반영됩니다.
번호 | 제목 | 글쓴이 | 날짜 | 조회 수 |
---|---|---|---|---|
5 | [mysql] 작은 용량의 파일 로드 속도가 느려진 경우 | 호스트웨이 | 2015.09.22 | 7106 |
4 | MYSQL 접속 - 소켓 지정하여 접속하기 | 호스트웨이 | 2015.09.23 | 58390 |
3 | DB접속시 DNS 관련 오류 | 호스트웨이 | 2015.09.25 | 18294 |
2 | [Oracle] 대량 자료 조회 Parallel | 호스트웨이 | 2015.09.26 | 7245 |
1 | MySQL Bash 스크립트를 활용한 로컬 백업 | 호스트웨이 | 2016.02.04 | 12405 |