Les deux sens de mySQL base de données de synchronisation entre hébergé et de la production locale du serveur
Si le scénario est le suivant:
J'ai une base de données mySQL sur un serveur local en cours d'exécution sur Windows 2008 Server. Le serveur est uniquement destinée à être accessible par les utilisateurs sur notre réseau et contient nos sociétés calendrier de production de l'information. J'ai ce qu'est essentiellement la même base de données en cours d'exécution sur un serveur hébergé sous linux, qui est destinée à être accessible en ligne, afin que nos clients puissent s'y connecter et mettre à jour leurs commandes.
Ce que je veux faire est une synchronisation bidirectionnelle des deux tables dans la base de données de sorte que les commandes sont à jour dans les deux bases de données, et un moyen de synchronisation de notre serveur à la, a accueilli l'un avec les données d'autres tables. L'extrémité avant de la base de données est écrit en PHP. Je vais dire ce que je suis en train de travailler avec de si loin, et j'apprécierais si les gens pouvaient laissez-moi savoir si je suis sur la bonne voie ou aboiements le mauvais arbre, et j'espère me pointer dans la bonne direction.
Ma première idée est de faire (à la fin de l'scripts PHP qui génèrent des modifications pour les tables de commandes) un export des modifications qui ont été apportées, peut-être en utilisant INSERT into OUTFILE OÙ compte = compte ou quelque chose de similaire. Cela permettrait de limiter la taille du fichier de petite plutôt que d'exporter l'ensemble de la table commandes. Ce que je suis accroché sur est de savoir comment (A) de l'exporter un fichier SQL plutôt que d'un fichier CSV (B) comment inclure les informations au sujet de ce qui a été supprimé ainsi que ce qui a été inséré (C) comment faire pour récupérer ce fichier sur l'autre serveur et d'exécuter l'instruction SQL.
Je suis à la recherche en SSH et PowerShell actuellement mais ne semble pas possible de formuler une vision solide de exactement comment cela va fonctionner. Je suis à la recherche dans des tâches cron et les tâches planifiées de Windows. Cependant, il serait mieux si d'une certaine façon les mises à jour tout simplement eu lieu à chaque fois qu'il y avait un changement, plutôt que sur un calendrier pour les garder synchronisés en temps réel, mais je ne peux pas tout à fait comprendre que l'on sort. Je veux pas être en cours d'exécution de la tâche planifiée/cronjob au moins une fois toutes les quelques minutes, bien que j'imagine que tout ce dont il aurait besoin pour faire est de vérifier s'il y avait des fichiers image qui devait être mis sur l'opposition de serveur, pas nécessairement la synchronisation de quoi que ce soit si rien n'avait changé.
Quelqu'un a déjà fait quelque chose comme ça? Nous parlons de modification/ajout/suppression de 1(min) à 160 lignes(max) dans les tableaux à la fois. J'aimerais entendre les pensées des gens à propos de ce truc que je continue à la recherche de mes options. Merci.
Aussi, juste pour préciser, je ne suis pas sûr si l'un de ces est vraiment un maître ou un esclave. Il n'est pas toujours la précision des données, c'est plus les données les plus récentes qui doit être dans les deux.
+1 Note Plus
Une autre chose me vient à l'esprit maintenant est d'ajouter à la fin de la commande de mise à jour de script sur un côté d'une autre config/connexion script pointant vers les autres serveurs de base de données, puis exécutez à nouveau exactement les mêmes requêtes, car ils ont des structures identiques. Maintenant que les sons de facile.... Pensées?
OriginalL'auteur Johnny Mnemonic | 2011-11-03
Vous devez vous connecter pour publier un commentaire.
Vous ignorez peut-être que MySQL lui-même peut être configuré avec des bases de données sur des serveurs distincts de façon opportuniste synchroniser les uns aux autres. Voir ici pour quelques détails; aussi, la recherche autour de MySQL anneau de réplication. L'installation est un peu fragile et vous demande d'en apprendre un peu sur La réplication MySQL. Ou vous pouvez créer un cluster, beaucoup plus élevé de la courbe d'apprentissage, mais moins fragile.
Si vous voulez vraiment rouler vous-même, vous avez tout à fait à l'aventure dans la conception de l'avance de vous. Le plus grand problème que vous devez résoudre n'est pas comment le faire fonctionner, c'est comment le faire fonctionner correctement d'après l'un des serveurs tombe en panne pour une heure ou votre modem DSL fond, ou d'un disque dur se remplit ou...
Pour le cas où nous sommes en ce moment je vais avec ma dernière idée... je vais simplement exécuter la requête sur le serveur local, de se reconnecter au serveur distant, et de les exécuter à nouveau la requête. Jusqu'à ce que j'ai compris tout le reste de cette réplication des trucs...
La réplication des sons beaucoup plus effrayant que ce qu'il est. Fondamentalement, ils sont en train de faire exactement ce que vous proposez, mais ils ont compris et manipulés tous (ou au moins la plupart) du bord et un cas d'insuffisance. Vous ajoutez environ 10 incantations à mysql.ini de chaque côté, une mise au point des schémas, assurez-vous que le pare-feu sont ouverts, et il devrait commencer à travailler et de se réparer automatiquement après que la plupart des échecs. Il y a des détails pour le fixer et autres joyeusetés, mais vous aurez à traiter avec ceux peu importe la façon dont votre système finit de travail.
OriginalL'auteur David O'Riva
Lancer une requête sur un local et un serveur distant peut être un problème si le sauts de connexion. Il est préférable de chaque requête stockée localement dans le fichier, telles que GG-MM-DD-HH.sql, puis envoyer les données toutes les heures, quand l'heure expiré. Période de mise à jour peut être réduit à 5 minutes par exemple.
De cette façon, si la connexion des pauses, le rétablissement de la prendre sur la gauche au-dessus des fichiers.
À la fin de l'insertion de fichier CRC pour la vérification de contenu.
OriginalL'auteur Ivan Stojanovic