IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Administration MySQL Discussion :

[MySQL 5] Mise à jour de 3 bases les unes par rapport aux autres


Sujet :

Administration MySQL

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    36
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 36
    Points : 28
    Points
    28
    Par défaut [MySQL 5] Mise à jour de 3 bases les unes par rapport aux autres
    (j'espère poster dans le bon sujet, toutes mes excuses si ce n'est pas le cas)

    Voici ma problématique initiale :
    J'ai une application en PHP qui va être utilisée sur 3 réseaux différents : A', B' et C'. Sur chacun de ces réseaux une base de données MySQL est posée : A, B et C.

    Chaque nuit, un batch doit tourner permettant de mettre à jour chaque base avec le contenu des deux autres : A est mise à jour avec les données de B et C, B est mise à jour avec les infos de A et C et C est mise à jour avec les infos de A et B, afin d'obtenir 3 bases identiques chaque matin.
    La solution du batch nocturne est choisie car les réseaux sont étanches entre eux de jour (contrainte supprimable la nuit pour une durée déterminée).

    Afin qu'il n'y ait pas de conflits dans les ID, les valeurs d'autoincrément de A commencent à 0, ceux de B à 300000 et ceux de C à 600000.
    Il y aura environ 50 insert/update maximum par jour.

    J'utilise MySQL 5.

    J'ai parcourru la documentation et j'en suis arrivé au point suivant : il faut utiliser les logs binaires.

    Mes questions sont les suivantes :
    - Le log de modification semblait parfaitement adapté à mon besoin, mais il n'est plus disponible depuis MySQL 5.0. Comment faire pour récupérer uniquement les requêtes du log binaire ?

    - Lors d'un insert, la valeur de l'autoincrement ne semble pas inclus dans la log binaire. Y a-t-il une option dans MySQL pour forcer ceci ? Le cas échéant, il faudrait que je modifie l'application afin de générer un INSERT contenant la valeur de l'autoincrément... Comment faire pour qu'il n'y ait pas de problème de transaction ?
    Explication : si je récupère la valeur de l'autoincrement, fait "autoincrement+1" et place cette valeur dans la requete INSERT, il peut y avoir accès concurrent en même temps...

    - Y existe-t-il un moyen plus simple de procéder que je n'aurai pas vu ?

    D'avance merci, j'avoue que je suis un peu perdu.

  2. #2
    Membre éprouvé
    Avatar de Sivrît
    Profil pro
    Inscrit en
    Février 2006
    Messages
    953
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2006
    Messages : 953
    Points : 1 249
    Points
    1 249
    Par défaut
    Citation Envoyé par Doc.Fusion Voir le message
    Afin qu'il n'y ait pas de conflits dans les ID, les valeurs d'autoincrément de A commencent à 0, ceux de B à 300000 et ceux de C à 600000.
    Il y aura environ 50 insert/update maximum par jour.
    Il est aussi possible de spécifier que l'incrément se fait de N à chaque fois (en démarrant chacun à 0, 1 et 2).

    Citation Envoyé par Doc.Fusion Voir le message
    J'ai parcourru la documentation et j'en suis arrivé au point suivant : il faut utiliser les logs binaires.
    Personnellement j'en serais moins certain. Le log binaire sert essentiellement à deux choses : la réplication (qui est une copie à l'indentique), et, en couplant avec un dump, la possibilité de restaurer les données à un instant arbitraire.

    Le log binaire et la réplications ne sont pas faits pour synchroniser des bases différentes. Puisque l'on rejoue les requêtes, toute différence entre le maitre et l'esclave va les faire diverger de plus en plus.

    Pour que ce soit viable, il faudrait qu'il y ait uniquement des ajouts. Ou jamais de modifications/suppressions concurrentes dans la même journée.

    Citation Envoyé par Doc.Fusion Voir le message
    Mes questions sont les suivantes :
    - Le log de modification semblait parfaitement adapté à mon besoin, mais il n'est plus disponible depuis MySQL 5.0. Comment faire pour récupérer uniquement les requêtes du log binaire ?
    En fait, c'est le log binaire. MySQL est livré avec la commande "mysqlbinlog" justement pour l'exploiter.

    Citation Envoyé par Doc.Fusion Voir le message
    - Lors d'un insert, la valeur de l'autoincrement ne semble pas inclus dans la log binaire. Y a-t-il une option dans MySQL pour forcer ceci ? Le cas échéant, il faudrait que je modifie l'application afin de générer un INSERT contenant la valeur de l'autoincrément... Comment faire pour qu'il n'y ait pas de problème de transaction ?
    Explication : si je récupère la valeur de l'autoincrement, fait "autoincrement+1" et place cette valeur dans la requete INSERT, il peut y avoir accès concurrent en même temps...
    Pas dans la 5.0. Les dernières versions ont des options en pour la réplications, mais je ne sais pas si ça couvre ce cas. A priori c'est à régler au niveau applicatif. Ça suppose de gérer soi même une séquence: Une table qui donnera le prochain numéro à utiliser. Ça donne essentiellement un "select for update" suivi d'une incrémentation.

    Citation Envoyé par Doc.Fusion Voir le message
    - Y existe-t-il un moyen plus simple de procéder que je n'aurai pas vu ?
    A ma connaissance il n'y a pas de méthode simple. Suivant l'application, il peut être possible de synchroniser en cherchant les différences, ou alors en journalisant les modifications pour les appliquer sur les autres serveurs, mais il faut pouvoir décider de qui l'emporte en cas de conflits.

Discussions similaires

  1. Position des QLabel les uns par rapport aux autres
    Par dharkan dans le forum Débuter
    Réponses: 4
    Dernier message: 23/04/2011, 18h21
  2. Réponses: 3
    Dernier message: 24/07/2010, 21h02
  3. Placer des table les unes par rapport aux autres.
    Par IyF33 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 13
    Dernier message: 03/07/2008, 09h29
  4. Agrandissement/Réduction de rectangle, les uns par rapport aux autres avec contrainte
    Par zuzuu dans le forum Algorithmes et structures de données
    Réponses: 15
    Dernier message: 17/01/2008, 16h34
  5. Numeroter les tables par rapport aux contraintes
    Par nicassy dans le forum Outils
    Réponses: 10
    Dernier message: 02/02/2007, 11h39

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo