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
。
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
。