Mysql
 sql >> Base de données >  >> RDS >> Mysql

Quel est le meilleur moyen de synchroniser de manière bidirectionnelle des données dynamiques en temps réel à l'aide de mysql

Il n'y a pas beaucoup de performances à gagner en répliquant votre base de données sur deux maîtres. Cependant, il y a un peu de basculement si vous codez votre application correctement.

La configuration maître-maître est essentiellement la même que la configuration esclave-maître, mais les deux esclaves sont démarrés et une modification importante de vos fichiers de configuration sur chaque boîtier.

Maître MySQL 1 :

auto_increment_increment = 2
auto_increment_offset = 1 

Maîtriser MySQL 2 :

auto_increment_increment = 2
auto_increment_offset = 2

Ces deux paramètres garantissent que lorsque deux serveurs se disputent une clé primaire pour une raison quelconque, ils ne dupliquent pas et ne tuent pas la réplication. Au lieu d'incrémenter de 1, tout champ d'auto-incrémentation sera par défaut incrémenté de 2. Sur une boîte, il commencera le décalage à partir de 1 et exécutera la séquence 1 3 5 7 9 11 13 etc. Sur la deuxième boîte, il commencera le décalage à 2 et parcourez 2 4 6 8 10 12 etc. D'après les tests actuels, l'incrémentation automatique semble prendre le prochain numéro libre, pas celui qui est resté avant.
Par ex. Si le serveur 1 insère les 3 premiers enregistrements (1 3 et 5) lorsque le serveur 2 insère le 4ème, il recevra la clé de 6 (et non 2, qui reste inutilisé).

Une fois que vous avez configuré cela, démarrez-les tous les deux en tant qu'esclaves.
Ensuite, pour vérifier que les deux fonctionnent correctement, connectez-vous aux deux machines et exécutez la commande SHOW SLAVE STATUS et vous devriez noter que les deux Slave_IO_Running et Slave_SQL_Running doivent tous les deux indiquer "OUI" sur chaque case.

Ensuite, bien sûr, créez quelques enregistrements dans une table et assurez-vous qu'une boîte n'insère que des clés primaires impaires et que l'autre n'incrémente que des clés paires.

Effectuez ensuite tous les tests pour vous assurer que vous pouvez exécuter toutes les applications standard sur chaque boîte avec une réplication sur l'autre.

C'est relativement simple une fois que ça marche.
Mais comme cela a été mentionné, MySQL le déconseille et vous conseille de vous assurer que vous êtes conscient de cette fonctionnalité lors de l'écriture de votre code d'application.

Modifier : Je suppose qu'il est théoriquement possible d'ajouter plus de maîtres si vous vous assurez que les décalages sont corrects, etc. Vous pourriez cependant, de manière plus réaliste, ajouter des esclaves supplémentaires.