Question

J'ai un serveur de test qui utilise des données à partir d'une base de données de test. Quand je suis fait des tests, il est déplacé à la base de données en direct.

Le problème est, j'ai d'autres projets qui reposent sur les données actuellement en production, donc je dois exécuter un script qui récupère les données des tableaux dont j'ai besoin, supprime les données dans la base de données de test et insère les données de la DB en direct.

J'ai essayé de trouver un moyen d'améliorer ce modèle. Le problème n'est pas tant dans la migration, car les données n'est mise à jour une ou deux fois par semaine (sans aucune action de ma part). Le problème est d'avoir la migration ont lieu seulement quand il a besoin. Je voudrais que mon script de migration inclut une vérification rapide sur les tables en direct et les tables de test et, le cas échéant, faire bouger. S'il n'y a pas été mises à jour, le script se ferme.

De cette façon, je peux inclure le script de mise à jour dans mes autres scripts et ne pas avoir à se soucier si les données sont synchronisées.

Je ne peux pas utiliser l'horodatage. D'une part, je n'ai pas de contrôle sur les tables du côté en direct une fois qu'il va vivre, et aussi parce qu'il semble un peu bête en vrac les tables pour plus conviencience.

J'ai essayé de faire un « AFFICHER TABLE STATUT DE liveDB » mais parce que les tables sont InnoDB, il n'y a pas de « temps de mise à jour », plus, il apparaît que le « Créer Time » était ce matin, me porte à croire que la base de données est sauvegardé et recréé tous les jours.

Y at-il d'autres biens dans le tableau qui montre que des deux est plus récente? Un "récent Date de la ligne" peut-être?

Était-ce utile?

La solution

En bref: Faire la mise à jour en direct-développement de première classe dans votre application. Au lieu de dépendre du moteur de base de données pour vous fournir les informations nécessaires pour vous permettre de prendre une décision (mettre à jour ou de mettre à jour ... qui est la question ), mettre en œuvre juste dans le cadre de ton application. Dans le cas contraire, vous essayez d'adapter une cheville ronde dans un trou carré.

Sans savoir ce que votre modèle de données est, et sans comprendre du tout ce que votre modèle de synchronisation est, vous avez quelques options:

  1. les clés primaires Match contre la base de données en direct par rapport à la base de données de test. Lorsque le test> Live ID, effectuez une mise à jour.
  2. Utilisez horodatages dans une table pour déterminer si elle doit être mise à jour
  3. Utilisez le md5 d'une table de base de données et la date de modification (UTC) pour déterminer si une table a changé.

Longue histoire courte: synchronisation de base de données est très difficile. Mettre en œuvre une solution qui est spécifique à votre application. Il n'y a pas de solution « générique » qui fonctionnera parfaitement.

Autres conseils

Si vous avez un autoincrement dans vos tableaux, vous pouvez comparer les valeurs maximales de autoincrement pour voir si elles sont différentes.

Mais quelle version de MySQL utilisez-vous?

Au lieu de rouler vos propres, vous pouvez utiliser une solution pré-existante pour maintenir les bases de données synchronisées. Je l'ai entendu de bonnes choses au sujet de la SJA de SQLYog (voir ici ). Je ne l'ai jamais utilisé moi-même, mais je suis très impressionné par leurs autres programmes.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top