web-dev-qa-db-fra.com

Dans une réplication MySQL maître / esclave, que se passerait-il si j'écrivais sur l'esclave?

Plusieurs questions

  • L'entrée esclave resterait-elle jusqu'à ce qu'il y ait une insertion/mise à jour/suppression de la table sur le maître qui pourrait affecter l'esclave?

  • Sinon, comment puis-je m'assurer que l'esclave est synchronisé avec le maître à l'avenir (en supprimant l'entrée esclave ou en copiant cette entrée manuellement sur le maître)?

  • Plus important encore, comment puis-je détecter que les tables sont désynchronisées?

17
kfmfe04

Tant que vous n'effectuez aucune instruction INSERT/UPDATE/DELETE directement sur l'esclave, votre esclave devrait bien fonctionner. Sinon, la réplication MySQL pourrait se casser si vous INSÉRER une nouvelle ligne dans mydb.mytable sur l'esclave et, via la réplication, l'esclave détecte plus tard un INSERT d'une ligne dans mydb.mytable avec la même CLÉ PRIMAIRE. Cela produit l'erreur 1062 (clé en double).

La seule façon d'écrire sur Slave sans interrompre la réplication MySQL est la suivante:

  • Le maître a des bases de données db1, db2, db3
  • L'esclave réplique les bases de données db1, db2, db3 du maître
  • Vous courez CREATE DATABASE db4; sur l'esclave
  • Vous effectuez des INSERTs/UPDATEs/DELETEs uniquement sur db4 sur l'esclave
  • Vous ne faites pas INSERT/UPDATEs/DELETEs uniquement sur db1, db2, db3 sur l'esclave

Pour détecter un maître et un esclave désynchronisés sans télécharger aucun outil, choisissez une table et exécutez CHECKSUM TABLE contre une table sur le maître et la copie de l'esclave de la même table.

[~ # ~] exemple [~ # ~]

Si vous avez une table mydb.mytable, exécutez la commande contre:

mysql> CHECKSUM TABLE mydb.mytable;

Si les valeurs ne reviennent pas de la même manière, alors quelque chose est désynchronisé.

Si vous voulez examiner un tas de table en vrac, vous pouvez descendre MAATKIT de Percona. Vous aurez besoin de deux outils spécifiques (Percona a également la boîte à outils Percona qu'ils ont eux-mêmes créée à partir de MAATKIT qui est maintenant en promotion plus)

ou

pt-table-checksum exécutera un CHECKSUM TABLE par rapport à toutes les tables du maître et de l'esclave. Vous pouvez le configurer pour faire toutes les bases de données uniquement sur des bases spécifiques.

pt-table-sync peut être exécuté sur un esclave sur n'importe quelle table. En utilisant les options --print et --sync-to-master, vous pouvez voir quelles instructions SQL doivent être exécutées sur l'esclave pour qu'elles correspondent parfaitement au maître. Cet outil ne fonctionne pas avec une table qui n'a pas de CLÉ PRIMAIRE ou CLÉ UNIQUE.

J'utilise MAATKIT depuis des années. Je le fais encore. Je n'ai pas encore essayé le Percona Toolkit, mais je suis sûr qu'il devrait être de la même qualité que MAATKIT.

14
RolandoMySQLDBA