2016-06-13 2 views
0

Galera 복제에 mariaDB I NSERT … ON DUPLICATE KEY UPDATE을 사용해도 안전합니까?Galera 복제와 함께 사용할 수있는 이중 키 업데이트시 mariaDB INSERT ... ON입니까?

나는 행 기반 복제 + 마스터 마스터 Why mysql INSERT ... ON DUPLICATE KEY UPDATE can break RBR replication on a master/master configuration

에 안전하지 않습니다 것으로 나타났습니다하지만이 갈레 복제 관련이 있는지 찾을 수 없습니다. Galera 클러스터를 구성 할 수 있습니까?이 작업은 항상 작동합니까? INSERT … ON DUPLICATE KEY UPDATE 이외의 다른 somethig를 사용할 수 있습니까? 아래로

내 사용 사례는 다음과 같이

INSERT into logData (logKey, month_of_year) 
values(:logKey,:month_of_year) ON DUPLICATE KEY UPDATE 
counter=counter+1 

내 logData 테이블이 만들어집니다 참조 가짜입니다

CREATE TABLE `logData ` (
    `logKey` VARCHAR(20) NOT NULL, 
    `month_of_year` DATE NOT NULL, 
    `counter` INT(11) NOT NULL DEFAULT '1', 
    `latest_date` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 
    PRIMARY KEY (`logKey`, `month_of_year`) 
) 
COLLATE='utf8_general_ci' 
ENGINE=InnoDB; 

답변

1

있다. 두 개의 UNIQUE 키 (PK와 UNIQUE 키)를 가지고 있기 때문에 문제가 발생했으며 두 마스터는 모두 동일한 키에 대한 값을 받았습니다.

UNIQUE 키가 PK가 아닌 것으로 보이므로 아무런 문제가 없습니다. 그리고 Galera는 문제를 해결하는 코드를 가지고 있지만, 보통 마스터 마스터는 이 아니고이 아닙니다.

또는 적어도 과 동일한 문제가 발생하지 않습니다.

COMMITting IODKU 이전에 Galera는 다른 모든 노드를 검사합니다. 그들 중 한 명이 동시에 동일한 쿼리를받는다면 불평 할 것입니다. 그런 다음 원본 노드가 COMMIT에 오류를 발생시킵니다.

이러한 이유로 인해 이어야합니다. Galera를 사용할 때 COMMIT 후에도 오류를 확인하십시오.

오류가 발생했습니다. 쿼리를 다시 실행하십시오. 두 번째로 IODKU를 실행하면 다른 노드의 쿼리가 완료되고이 노드가 '업데이트'를 수행합니다. 카운터는 '2'가됩니다.

더 자세히 논의 할 필요가있는 경우 SHOW CREATE TABLE을 제공해주세요.

+0

감사합니다. 내 질문 CREATE TABLE 문을 업데이트했습니다. 기본 키보다 다른 인덱스가 없습니다. –

관련 문제