2016-06-13 1 views
0

Является ли mariaDB I NSERT … ON DUPLICATE KEY UPDATE безопасным для использования с репликацией Galera?Является ли mariaDB INSERT ... ON DUPLICATE KEY UPDATE безопасным для использования с репликацией Galera?

Я обнаружил, что это не безопасно с Роу репликаций на основе + Мастер Why mysql INSERT ... ON DUPLICATE KEY UPDATE can break RBR replication on a master/master configuration

Но я не могу найти, как это относится к репликации Галера. Может быть настроен кластер 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 

мой 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 (ПК и ключ UNIQUE), и оба мастера получали значения для уникального ключа.

У вас нет ключа UNIQUE кроме PK, поэтому у вас не должно возникнуть проблемы. И, кроме того, у Галера есть код для решения проблемы, тогда как обычный Мастер-Мастер делает не.

Или, по крайней мере, вы не получите такой же проблема.

До COMMITting IODKU, Galera проверит все остальные узлы. Если один из них одновременно получит тот же запрос, он будет жаловаться. Тогда исходный узел вызовет ошибку на COMMIT.

По этой причине вы должны проверить ошибки даже после COMMIT при использовании Galera.

Что делать с ошибкой? Повторно выполните запрос. Когда вы запустите IODKU во второй раз, запрос другого узла, вероятно, будет завершен, и этот узел выполнит «обновление». И счетчик будет «2», как и должно быть.

Если вам нужно обсудить это дальше, предоставьте SHOW CREATE TABLE.

+0

спасибо! Я обновил свой запрос CREATE TABLE. У меня нет других индексов, кроме первичного ключа. –

Смежные вопросы