Auteur Sujet: Synchronisation unidirectionnelle de 2 serveurs MySQL  (Lu 2496 fois)

0 Membres et 1 Invité sur ce sujet

Hors ligne Dimitri01

  • Connaisseur
  • ***
  • Messages: 366
Synchronisation unidirectionnelle de 2 serveurs MySQL
« le: 19 avril 2006 à 12:14:13 »
Bonjour,

J'ai un site internet php/MySQL hénergé chez phpnet.

J'ai, sur un intranet, une gestion de fichier d'adhérents, toujours en php/MySQL.
Nous travaillons sur ce fichier régulièrement.

Certaines données de notre fichier intranet doivent être publiées sur notre site internet.

Actuellement, j'exporte les données à mettre en ligne dans un fichier sql. Ensuite, je vais dans phpmyAdmin sur PHPNET, je vide la table, et fait un import via le fichier sql précédemment généré depuis ma base locale (celle sur l'intranet).

On est bien d'acord, c'est pas top du tout...

Comment automatiser en partie cette action, sans avoir à vider la table ? Il s'agit bien là de faire une synschronisation des données MySQL, dans un seul sens.

Pour résumer, nous travaillons à plusieurs sur un fichier local (en intranet) modifié plusieurs dizaines de fois par jours. Et l'idéal serait que la base MySQL placée chez PHPNET (utilisée sur un site internet) reprennent le contenu exact de notre base locale tous les soirs (ou matins, donc 1 fois par jour seulement).

PS. Nous ne pouvons pas travailler directement en ligne, car nous ne pouvont nous permettre aucune indisponibilité technique (sinon, on se retrouve tous au chômage technique). D'où la nécessité de travailler en local, puis de mettre à jour la base MySQL en ligne.

Merci pour vos lumières !

Hors ligne Ice

  • VIP
  • *****
  • Messages: 2 403
    • ATFX
Re : Synchronisation unidirectionnelle de 2 serveurs MySQL
« Réponse #1 le: 19 avril 2006 à 13:03:03 »
Pas possible de travailler en ligne mais sur une nouvelle base (temporaire) ?
Apres, la mise à jour devrait être plus simple.

Hors ligne Dimitri01

  • Connaisseur
  • ***
  • Messages: 366
Re : Synchronisation unidirectionnelle de 2 serveurs MySQL
« Réponse #2 le: 19 avril 2006 à 13:41:08 »
Non Ice, comme expliqué dans mon PS.

Bon, voilà comment je compte faire. Je compte développer un petit soft (exe en local), qui via php, procédera à la synchronisation.

Chaque mise à jour sera indiqué dans un champ (timestamp). Je compare ce champ à celui qui est en ligne et je pourrai ainsi ne modifier que ce qui est à modifier...

Cela me paraît plutôt bien en terme d'économie de requête et de ressource.

Je vais creuser et voir tout ça.

Si vous avez une autre idée, je suis preneur quand même !

Hors ligne Just

  • Expert
  • ****
  • Messages: 924
    • AiN-IRC LE portail du 01 [Ain]!
Re : Synchronisation unidirectionnelle de 2 serveurs MySQL
« Réponse #3 le: 20 avril 2006 à 10:50:50 »
Bonjour!

Bon je POST ici mais j'avous ne pas avoir les connaissances necessaires à la réalisation d'une réelle solution. Simplement j'espère que mes pistes de reflexion t'aideront à avancer... Tant mieux donc si c'est le cas ^^!

Tout ca est réalisable de façon intégralement automatique.
Quelques soit ton serveur en local tu trouveras de quoi faire des taches plannifiées [Cron sous système Unix... autres sous système windows?]. De là il t'es donc facil de charger une page PHP [pour rester dans une programmation type web assez simple].
Ensuite il te faut les scripts suivant:
- un qui se charge de créer un fichier SQL contenant les données de la base locale [script en local].
- un autre qui se connecte en ftp chez PHPnet et qui upload le fameux fichier SQL [script en local].
- enfin un qui va se charger de rééxécuté le fichier SQL sur la base de PHPnet [script en ligne puisqu'on ne peux avoir d'accès au serveur SQL PHPnet de l'exterrieur].

Pour le troisième, sers toi des méthodes de PHPmyAdmin pour éxécuter le fichier.
Pour l'appel des pages les méthodes WebCron devrait t'éclairer.
Enfin une précision, à ma connaissance certaines instruction MySQL en INSERT permette le traitement des doublons... ce qui résoudrait ton problème de vidage de table. Tu traite les doublons en précisant que tu souhaites les remplacer.

J'n'ai aucune idée de la fesabilité de cette solution je le rappel ^^!
C'est juste une somme d'idées :).

Bon courage ;)!
Just OnMyOwn ... :B
"Be CoOl, KeEp CoOl, HaVe FuN!"
-
http://www.ain-irc.net/
http://www.funpart.net/

Hors ligne Dimitri01

  • Connaisseur
  • ***
  • Messages: 366
Re : Synchronisation unidirectionnelle de 2 serveurs MySQL
« Réponse #4 le: 20 avril 2006 à 18:57:09 »
Merci pour tes idées, Just  :wub:

Je pense malgré tout m'en tenir à ma solution qui consite à développer un soft (je développe sous director).
Il y a pleins d'avantages à cela, par rapport à une solution php en local.

Le but étant de créer une application portable et pouvant facilement s'adapter à d'autres bases...

Je commencerai le développement dès que j'aurai un peu de temps...

A+

Hors ligne diaoul

  • Expert
  • ****
  • Messages: 663
    • http://diaoul.net
Re : Synchronisation unidirectionnelle de 2 serveurs MySQL
« Réponse #5 le: 21 avril 2006 à 00:48:12 »
la ligne de commande et les fichiers batch, c'est bien, mangez-en ^_^


Pour faire un dump de la base locale:
mysqldump --host=127.0.0.1 --opt -u login -ppassword --skip-lock-tables -r monfichier.sql lenomdemabaselocaleligne à sauvegarder dans le fichier dump.bat

Pour l'envoyer sur phpnet (oui, JUST, c'est possible...)
mysql --host=87.98.197.31 -u login1(ou login2) -ppassword mabase1(ou2) <monfichier.sqlvérifier par phpadmin que c'est ok la 1ère fois
à sauvegarder dans le fichier load.bat

Attention :pas d'espace entre -p et le mot de passe

Après avoir vérifier que les deux fichiers fonctionnent en ligne de commande (démarrer, executer, command sous XP) -_-,
Pour automatiser, se servir des taches planifiées dans windows  (ou de la commande schtasks, pour les enragés...)
 et faire se succeder les taches à 1 mn d'intervalle ou plus.
sous XP, pour les courageux , télécharger la commande sleep http://www.microsoft.com/downloads/details.aspx?FamilyID=9d467a69-57ff-4ae7-96ee-b18c4790cffd&DisplayLang=en du serveur 2003  et faire un seul fichier batch avec un sleep 60 entre les deux lignes

ce genre de choses peut aussi servir à ceux qui en ont marre de demander des dumps ou de se servir de mysqlfront...
« Modifié: 01 mai 2006 à 01:49:11 par diaoul »

Hors ligne Alx

  • Connaisseur
  • ***
  • Messages: 261
    • http://www.alliance-pbem.net
Re : Synchronisation unidirectionnelle de 2 serveurs MySQL
« Réponse #6 le: 21 avril 2006 à 10:30:26 »
Mais tu fais tout à chaque fois, là!
Webmaster de Alliance-pbem, Jeu de rôle par e-mail dans l'univers Star Wars ™

www.alliance-pbem.net

Hors ligne diaoul

  • Expert
  • ****
  • Messages: 663
    • http://diaoul.net
Re : Synchronisation unidirectionnelle de 2 serveurs MySQL
« Réponse #7 le: 21 avril 2006 à 18:23:43 »
Citer
Et l'idéal serait que la base MySQL placée chez PHPNET (utilisée sur un site internet) reprennent le contenu exact de notre base locale tous les soirs (ou matins, donc 1 fois par jour seulement).
ben, c'est pas ce qui était demandé?

autrement, il suffit de se plonger dans les docs http://dev.mysql.com/doc/refman/5.0/fr/mysqldump.html pour n'agir que sur certaines tables (option --tables)
« Modifié: 21 avril 2006 à 18:29:14 par diaoul »