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

17

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 dans le maître)?

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

kfmfe04
la source
veuillez expliquer votre question correctement ...
Abdul Manaf
1
Une relation maître / esclave n'est-elle pas une synchronisation unidirectionnelle maître-esclave, mais pas l'inverse? Je demande ce qui se passerait si vous écrivez à l'esclave dans ce genre de configuration.
kfmfe04

Réponses:

14

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 INSERT / 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 d’outils, choisissez une table et exécutez CHECKSUM TABLE contre une table sur le maître et la copie de la même table de l'esclave.

EXEMPLE

Si vous avez une table mydb.mytable, exécutez la commande sur celle-ci:

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 plus promue)

ou

pt-table-checksumeffectuera un CHECKSUM TABLE contre 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-syncpeut être exécuté sur un esclave contre 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.

RolandoMySQLDBA
la source
ty pour la réponse détaillée. Je pensais que j'avais plus de questions, mais je pense que vos réponses ont couvert tous les cas (pt-table-sync semble être vraiment utile).
kfmfe04