2017-06-29 1 views
0

J'ai 1 serveur MySQL pour supporter l'application PHP. La logique dans l'application nécessite plusieurs requêtes. Par exemple, pour ajouter la transaction, j'ai besoin de créer plusieurs objets de requête et d'exécuter ces requêtes séparément sans utiliser commit. Cela signifie ajouter les données de transaction d'abord dans la table avec un objet. Et pour ajouter une méthode de paiement, je crée l'objet différent.Comment la réplication MySQL reste-t-elle synchronisée?

En ce moment, c'est bon parce que je n'ai qu'un seul serveur MySQL. Que se passera-t-il si j'ai plusieurs serveurs (MySQL Master-Slave).

La création de différents objets en une seule opération appellera différents serveurs. Et à cause des données de latence peuvent ne pas être disponibles sur un autre serveur.

S'il vous plaît me conseiller de le faire correctement. Si la question n'est pas claire, demandez des précisions. Merci!

+0

Parlez-vous de la réplication ou simplement de séparer les serveurs de base de données autonomes? – Machavity

+0

@Machavity: réplication. Je prévois de passer à amazon RDS ou Azure MySQL. Mais, je ne suis pas sûr que le code d'application actuel et la logique soutiendront cela. –

Répondre

2

Ce n'est vraiment pas un problème avec la réplication. Supposons que vous ayez la requête A, puis la requête B (qui repose sur A) et la requête C (qui repose sur B).

Donc vous faites le plus simple et les exécutez dans l'ordre A, B et C. La réplication les met dans un journal dans le même ordre. Donc, quand votre esclave les exécute, il les fera de la même manière et dans le même ordre. Dans le cas où ils sont désynchronisés, l'esclave sait où il s'est arrêté pour la dernière fois dans le journal et va le reprendre là-bas. Si vous utilisez RDS pour configurer l'esclave, ceci est géré automatiquement pour vous.

+0

Je l'ai. Donc, je suppose qu'il n'y aura pas de problème de latence même si en interne ils utilisent des serveurs différents. Et si la requête C repose sur B et B n'est pas dans le serveur 2, il sera automatiquement récupéré à partir du journal central de RDS. –

+0

En outre, des réflexions sur Azure MySQL? Ils viennent de lancer l'aperçu. Tous mes serveurs sont sur azur donc je considère cela sur RDS si c'est pareil. –

+0

Jamais utilisé Azure, mais RDS gère les esclaves directement pour vous (je suppose qu'Azure fait la même chose). Parfois, un esclave est bloqué et doit être déconnecté via des commandes, mais c'est pour une configuration manuelle de la réplication. – Machavity

0

Si vous envisagez d'utiliser RDS, vous interrogez un point de terminaison de cluster. Ce point de terminaison de cluster va automatiquement atteindre le serveur qui est actif et y créer les requêtes. Une fois vos requêtes validées, la base de données esclave se synchronisera automatiquement pour refléter vos modifications. Cela prend quelques millisecondes.