Linux DB

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;

 

위처럼 실행하게되면 그동안 쌓여있던 데이터들이 반영됩니다.