2012-08-29 3 views
0

우리는 2 년 동안 잘 작동 해 온 표준 Mysql 마스터/슬레이브 복제 시스템을 실행 중입니다. 우리가 슬레이브 DB를 사용하여 (마스터로 전환 한 후) 서버 중단 (마스터를 오프라인으로 렌더링)에서 복구 할 수 있었기 때문에 좋았습니다.Mysql 복제 오류 재생

어쨌든 우리가 서버를 복구하고 원래의 마스터를 마스터로, 원래의 슬레이브를 슬레이브로 되 돌린 후에 문제가 발생한 문제가 발생했습니다.

그게 내가 바보가 된 원인이었습니다.

기본적으로 슬레이브에서 쓰기가 발생했습니다. 마스터의 동일한 테이블에 대한 쓰기가 중복 된 기본 키 오류로 인해 복제 될 수 없음을 의미합니다.

내가 말했듯이, 내 잘못.

내가 잘못 작성한 슬레이브에서 레코드를 삭제할 수 있습니다. 따라서 슬레이브와 충돌하는 ID를 제거하지만 마스터 DB에서 레코드를 원합니다.

내 질문은 : 나는 (SQL_SLAVE_SKIP_COUNTER를 1로 설정하여) 마스터에서 관련 쿼리를 건너 뜀으로써 복제를 '고칠 수 있음'을 알고 있지만 마스터에서 레코드가 손실된다는 것을 의미합니다.

그래서 오류가있는 복제 쓰기를 '재생'하는 방법이 있습니까? 기본적으로 복제가 하나의 쿼리가되도록 지정 하시겠습니까?

아니면 내 슬레이브를 떨어 뜨리고 마지막으로 성공한 백업에서 다시 채우고 슬레이브로 설정 한 전체 rigmarole을 통과해야합니까?

미리 감사드립니다.

답변

0

단순한 수정/업데이트의 경우 ... 마스터에서 재생하거나 (슬레이브 바이너리 로그가있는 경우 수동으로 슬레이브 바이너리 로그에서 가져 오는 것), 슬레이브의 슬레이브 프로세스를 끄고 설정하지 않은 이유는 무엇입니까? 새 복제 포인터 (파일 & 위치)를 슬레이브에 표시하고 (마스터 상태 표시, 마스터에서) 슬레이브를 다시 시작 하시겠습니까?

+0

감사합니다. 실제로 잘못된 업데이트가 필요하지 않습니다. 문제를 해결하는 방법에 대한 질문이 많았습니다. 하지만 너는 나를 도왔다 - 내 대답은 아래에있다. – ChrisW

0

대답은 실제로 얼굴에서 나를 응시하고 있었다 (항상 그렇지 않다!).

복제 된 기본 키 오류는 슬레이브에 대한 삽입과 마스터의 동일한 테이블에 대한 삽입으로 인해 발생했습니다. 즉, 두 개의 새 레코드가 동일한 ID를 가졌음을 의미합니다.

운 좋게도 슬레이브에 삽입 할 필요가 없으므로 간단히 삭제했습니다. 기본 키 값이있는 레코드가 하나 뿐이라는 것을 의미합니다.

필자는 복제를 통해 레코드를 복제하려고하는 방법이 필요했습니다.

슬레이브를 다시 시작하십시오.

그래서 : 귀하의 회신 @Parallelis에 대한

mysql root:(none)>START SLAVE; 
Query OK, 0 rows affected (0.03 sec) 

mysql root:(none)> _