2016-06-13 3 views
0

Est-ce que mariaDB I NSERT … ON DUPLICATE KEY UPDATE est sûr à utiliser avec la réplication de Galera?Est-ce que mariaDB INSERT ... ON DUPLICATE KEY UPDATE peut-il être utilisé avec la réplication de Galera?

J'ai trouvé que ce n'est pas en sécurité avec réplications à base de rang + maître maître Why mysql INSERT ... ON DUPLICATE KEY UPDATE can break RBR replication on a master/master configuration

Mais je ne trouve pas comment cela se rapporte à la réplication Galera. Le cluster Galera peut-il être configuré, donc cette opération fonctionnera toujours, ou puis-je utiliser autre chose que INSERT … ON DUPLICATE KEY UPDATE?

Mon cas d'utilisation est comme indiqué ci-dessous:

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

ma table de logData est créé comme suit:

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; 

Répondre

1

Cette référence est faux. Il y avait un problème à cause de deux clés UNIQUE (la clé PK et la clé UNIQUE) et les deux maîtres recevaient les mêmes valeurs pour la clé unique.

Vous ne semblez pas avoir une clé UNIQUE autre que le PK, vous ne devriez donc pas avoir de problème. Et, en outre, Galera a le code pour résoudre le problème, tandis que Master-Master ordinaire fait pas.

Ou au moins vous n'obtiendrez pas le même problème.

Avant le COMMITting l'IODKU, Galera vérifie avec tous les autres nœuds. Si l'un d'eux reçoit simultanément la même requête, il se plaindra. Ensuite, le nœud d'origine provoquera une erreur sur le COMMIT.

Pour cette raison, doit vérifier les erreurs même après COMMIT lors de l'utilisation de Galera.

Que faire avec l'erreur? Ré-exécuter la requête. Au moment où vous exécutez l'IODKU la deuxième fois, la requête de l'autre nœud sera probablement terminée, et ce nœud fera la 'mise à jour'. Et le compteur sera '2', comme il se doit.

Si vous avez besoin d'en discuter davantage, veuillez fournir SHOW CREATE TABLE.

+0

merci! J'ai mis à jour mon instruction CREATE TABLE de question. Je n'ai pas d'autres index que la clé primaire. –