mariaDB INSERT … ON DUPLICATE KEY UPDATE 与 Galera 复制一起使用是否安全?

Is mariaDB INSERT … ON DUPLICATE KEY UPDATE safe to use with Galera replication?

mariaDB INSERT … ON DUPLICATE KEY UPDATE 与 Galera 复制一起使用安全吗?

我发现基于行的复制+主控不安全

但我找不到这与 Galera 复制有何关系。 能否配置 Galera 集群,以便此操作始终有效,或者我可以使用 INSERT … ON DUPLICATE KEY UPDATE 以外的其他东西吗?

我的用例如下:

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

我的日志数据table创建如下:

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;

该引用是伪造的。它有一个问题,因为有两个 UNIQUE 密钥(PK 和 UNIQUE 密钥)并且两个 Master 都收到了唯一密钥的 same 值。

除了PK,你似乎没有UNIQUE钥匙,所以你应该没有问题。而且,Galera 有解决问题的代码,而普通的 Master-Master 没有

或者至少你不会遇到同样的问题。

COMMITting IODKU 之前,Galera 将检查所有其他节点。如果其中之一同时收到相同的查询,它就会抱怨。那么原节点就会在COMMIT.

上报错

因此,即使在 COMMIT 使用 Galera 之后,您 也必须 检查错误。

错误怎么办?重新执行查询。到你第二次执行IODKU的时候,其他节点的查询可能已经结束了,这个节点会做'update'。计数器应该是“2”。

如果您需要进一步讨论,请提供 SHOW CREATE TABLE