2017-11-29 8 views
0

마스터 - 마스터 복제에서 데비안 스트레치 기반 MariaDB-Server를 두 개 설정했습니다.MariaDB 10.2.10 중복 키 오류시 슬레이브가 중지됨

슬레이브의 복제 설정 섹션은 다음과 같습니다

server-id  = 2226 
auto_increment_increment = 1 
auto_increment_offset = 1 
log_bin   = /var/tmp/mysql_binlog/mysql-bin.log 
log_bin_index  = /var/tmp/mysql_binlog/mysql-bin.log.index 
expire_logs_days = 3 
max_binlog_size   = 100M 
relay_log  = /var/tmp/mysql_binlog/slave-relay.log 
relay_log_index  = /var/tmp/mysql_binlog/slave-relay.log.index 
log_slave_updates = 1 
replicate_annotate_row_events = 0 
log_bin_trust_function_creators = 1 

나는 다음과 같은 오류가 발생하고있다 :

show slave status\G; 

      Relay_Log_File: slave-relay.032025 
      Relay_Log_Pos: 14887746 
    Relay_Master_Log_File: mysql-bin.001119 
     Slave_IO_Running: Yes 
       Last_Errno: 1062 
       Last_Error: Error 'Duplicate entry '71899-single' for key 'PRIMARY'' on query. Default database: 'mydb'. Query: 'INSERT INTO document_reference 
         (document_reference_document_id, document_reference_type, document_reference_value) 
        VALUES (71899, "single", 0)' 

하지만 : 나는 릴레이 로그 파일을 검토 한

MariaDB [(none)]> select * from mydb.document_reference WHERE document_reference_document_id=71899; 
Empty set (0.00 sec) 

을 - insert 문은 하나뿐입니다.

누구나 슬레이브에서 중복 입력 오류를 일으키는 지 알 수 있습니까?

추가 정보 :

마스터 설정 :

auto_increment_increment  | 1  
auto_increment_offset  | 1  
binlog_format    | MIXED 

표 정의 :

auto_increment_increment = 2 -- on both 
auto_increment_offset = 1 on one Master, = 2 on the other 

또한 설정

CREATE TABLE "document_reference" (
"document_reference_document_id" int(10) unsigned NOT NULL, 
"document_reference_type" enum('single,'multi') COLLATE utf8_unicode_ci  
NOT NULL DEFAULT 'single', 
"document_reference_value" int(11) NOT NULL, 
PRIMARY KEY ("document_reference_document_id","document_reference_type")) 
+0

PK가 71899 인 슬레이브에 이미 행이 있습니다. '단일 '? _Masters_에있는'auto_increment_increment'의 값은 무엇입니까? RBR인가 SBR인가? 우리에게 'SHOW CREATE TABLE document_reference'을 보여주세요. –

+0

안녕하세요 @ RickJames! 방금 정보를 추가했습니다. – Pumuckl77

답변

0

"듀얼 마스터"를 가지고, server_id 두 명의 마스터 (및 모든 슬레이브)에서 서로 달라야합니다. 그것들이 다르지 않다면 복제는 마스터들 사이를 돌며 진행됩니다.

그렇지 않으면 별도의 마스터에 삽입하면 동일한 AUTO_INCREMENT 값이 생성 될 수 있습니다.

그러나 문제는 해결되지 않습니다. (auto_inc는 관련이 없습니다.) 유일하게 가능한 대답은 (내가 생각하기에)이 행들 중 두 개가 삽입되었습니다 : (71899, "single", ...)이 삽입되었습니다. SELECT에 그런 증거가 없다면 DELETEs, 교착 상태 등이있을 수 있습니다. 따라서 확실한 대답은 없습니다.

+0

안녕하세요. 마스터 서버에서 일반 로그를 실행하고 grep-ed를 실행했습니다. 동일한 기본 키에 관한 다른 INSERT, UPDATE 또는 DELETE 문은 없습니다. 그래서 누군가가 잘못되었다는 생각을 가지고 있다면 ... – Pumuckl77

+0

슬레이브의 binlog는 어떻게됩니까? 아마도 누군가가 슬레이브에게 직접 글을 썼을 것입니까? –

+0

두 서버 모두에서'SHOW CREATE TABLE'을 수행하십시오. 완전히 비교하십시오. –