(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.
Partager