script multi serveur

script multi serveur - PHP - Programmation

Marsh Posté le 30-08-2007 à 00:21:23    

Bonjour.
Je voudrai faire en sorte que mon site sois jammai hs
donc je voulai savoir si il était possible que toute les 24h, ma base mysql sois duplique dans un autre serveur mysql
 
je m'explique :
j'ai un site A(primaire)
j'aimerai que toutes les 24h que le serveur B se sycronise avec le A
 
j'ai penser a un script php, qui serait executer par webcron , ou un service cron du genre.
 
ma question est: est-ce possible ?
 
si oui , comment ?

Reply

Marsh Posté le 30-08-2007 à 00:21:23   

Reply

Marsh Posté le 30-08-2007 à 00:24:32    

oui , utilise un script cron
mysql_dump pour extraire les données de ta base
puis rsync  pour transferer vers serveur B
puis chargement des données dans B


Message édité par flo850 le 30-08-2007 à 00:24:41
Reply

Marsh Posté le 30-08-2007 à 01:22:08    

sa donnerai sa ?
pour mysql_dump.

Code :
  1. <?php
  2. $password = $_GET['pw'];
  3. if($password=="xxxxxxxxxxxxxxxxxxx" )
  4. {
  5. // base de donnée
  6. $dbhost = 'localmachin';
  7. $dbuser = 'xxxxxxx';
  8. $dbpass = 'xxxxxxx';
  9. $dbname = 'xxxxxxx';
  10. //option
  11. $use_gzip = "yes";  //compression oui ou non  
  12. $remove_sql_file = "yes"; // suprimer fichier sql
  13. $remove_gzip_file = "yes"; // suprimer fichier gzip
  14. // config
  15. $savepath = "/home/xxx/www";
  16. $use_ftp = "yes";
  17. $ftp_server = "distanmachin";
  18. $ftp_user_name = "xxxxxx";
  19. $ftp_user_pass = "xxxxxxxx";
  20. $ftp_path = "/backupsql";
  21. // pas touche!!!!
  22. $filename = "$savepath/backup.sql";
  23. passthru("mysqldump --opt -h$dbhost -u$dbuser -p$dbpass $dbname >$filename" );
  24. if($use_gzip=="yes" ){
  25.  $zipline = "tar -czf backup.tar.gz backup.sql";
  26.  shell_exec($zipline);
  27. }
  28. if($remove_sql_file=="yes" ){
  29.  exec("rm -r -f $filename" );
  30. }
  31. if($use_gzip=="yes" ){
  32.  $filename2 = "$savepath/backup.tar.gz";
  33. } else {
  34.  $filename2 = "$savepath/backup.sql";
  35. }
  36. if($use_ftp == "yes" ){
  37.  $ftpconnect = "ncftpput -u $ftp_user_name -p $ftp_user_pass -d debsender_ftplog.log -e dbsender_ftplog2.log -a -E -V $ftp_server $ftp_path $filename2";
  38.  shell_exec($ftpconnect);
  39.  echo "<h4><center>$filename2 Was created and uploaded to your FTP server!</center></h4>";
  40. }
  41. if($remove_gzip_file=="yes" ){
  42.  exec("rm -r -f $filename2" );
  43. }
  44. }
  45. else
  46. {
  47. echo 'acces proteger' ;
  48. }
  49. ?>


Message édité par narutopgm le 30-08-2007 à 01:24:35
Reply

Marsh Posté le 30-08-2007 à 05:23:09    

Y'a des fonctions ftp et de traitements des fichiers en php, parce que exec c'est pas forcément passe partout :)
 
Sinon, si c'est un serveur où tu as la main dessus, réplication de base sur un serveur mysql esclave ailleurs, comme ça même pas besoin de gérer la chose ;)

Reply

Marsh Posté le 30-08-2007 à 10:07:29    

perso , j'aurai pas fait ça en php , et jutiliserai plutot rsync que des commandes ftp pour ne transferer que les changements
 
et sinon, il y aussi la réplication , mais il faut une version recente de Mysql

Reply

Marsh Posté le 30-08-2007 à 10:56:22    

Récente comment? La réplication existe dans mysql depuis mysql 3.23.15 ( http://dev.mysql.com/doc/refman/4. [...] ation.html ) soit depuis mai 2000.
 
Evidement, on a beaucoup plus de réglages et moins de perte de puissance (et de retard de réplication) avec un 5.1 qu'un 3.23 . ;)

Reply

Marsh Posté le 30-08-2007 à 10:58:20    

J'ai un hebergement web que je control avec cpanel ,
 j'ai un truc ssh mais j'ai pas encore compris comment il fonctionne (sur cpanel sinon ssh je m'en suis deja servis sur un dedie sous debian)
 
ma version de mysql est la 5.0.27
 
donc si avec cette description vous pouver me dire le meilleur choix cela serrais simpa

Reply

Marsh Posté le 30-08-2007 à 11:04:12    

omega2 a écrit :

Récente comment? La réplication existe dans mysql depuis mysql 3.23.15 ( http://dev.mysql.com/doc/refman/4. [...] ation.html ) soit depuis mai 2000.
 
Evidement, on a beaucoup plus de réglages et moins de perte de puissance (et de retard de réplication) avec un 5.1 qu'un 3.23 . ;)


tu r"sume bien la situation  
ca existe depuis pas mal de temps , mais ce n'est ( pour ce que j'ai pu en voir ) que depuis mysql5 qu'on peut envisager de faire de la réplication entre deux sites distants

Reply

Marsh Posté le 30-08-2007 à 11:27:22    

En php 4.0.0 on pouvait déjà indiquer des hôtes distants (encore heureux sinon quel est l'intérêt de la réplication si on est limité à la même machine) et je serais étonné que ça n'ai pas été le cas depuis le début même si je ne peux pas vérifié dans la doc de mysql (ils n'ont plus de documentation propre à mysql3)
Source http://dev.mysql.com/doc/refman/4. [...] howto.html petit 9 : la colonne MASTER_HOST permettant de donner l'adresse du serveur principal
 
J'ai l'impression que tu confonds avec la réplication circulaire qui n'était pas disponible en mysql3 à ma connaissance (je ne me rappelle plus à partir de quelle version c'est devenu possible)

Reply

Marsh Posté le 30-08-2007 à 11:28:38    

ok, mais d'apres se que j'ai compris il faut toucher a la config du fichier my.cfg (fichier de configuration de mysql)
mais en aillant un hebergement web je ne pense pas que j'ai accés a ceci

Reply

Marsh Posté le 30-08-2007 à 11:28:38   

Reply

Marsh Posté le 30-08-2007 à 12:07:05    

J'imagine que tu n'as pas non plus le droit non plus de rajouter des user mysql ni de modifier ceux qui existent et qu'ils ne permettent pas un accés à distance à leur serveur mysql.
Si c'est bien ça, alors en effet, la réplication n'est pas une solution dans ton cas. Il ne te reste plus qu'a passer par la création de fichiers qui te permettront d'importer les données sur ton autre serveur.
Si tu ne peux pas le faire avec les utilitaires de mysql et que tu n'as pas droit non plus à un select dont le résultat est sauvé dans un fichier ("SELECT mescolonnes INTO OUTFILE  'nom_fichier' FROM ..." ) alors il ne te restera plus qu'a utilisé un script fait intégralement en php.

Reply

Marsh Posté le 30-08-2007 à 12:55:54    

j'ai le droi de crée des user , et mettre des ip qui on le droi de se connecter a distance

Reply

Marsh Posté le 30-08-2007 à 13:13:21    

Dans ce cas, je te renvois à la documentation de mysql :  
http://dev.mysql.com/doc/refman/5. [...] howto.html
Tu risques de tatoner un tout petit peu au début (si tu peux fait un test avec deux installations locales de mysql pour bien voir la manoeuvre) mais si tu suis bien les instructions tu devrais réussir à mettre en place rapidement une réplication entre les deux serveurs. Après ça tu n'auras plus rien à toucher pour que le second serveur reste à jour. (avec juste un petit décalage de temps)

Reply

Marsh Posté le 01-09-2007 à 18:44:36    

cho je cromprend pas grand chose lol

Reply

Marsh Posté le 01-09-2007 à 23:45:26    

C'est pourtant pas bien dur!
 
Suffit de configurer les serveur avec un id différent, donner à l'esclave les paramètres (dans le fichier de config c'est plus simple et permanent), créer un utilisateur ou donner les droits à un existant pour la réplication et faire un start slave.
 
Rien de plus simple, mais du premier coup ça marche jamais, parce que t'oublies toujours un truc même en suivant le tuto qui est pas exhaustif ;)

Reply

Marsh Posté le 02-09-2007 à 11:57:05    

ok ^^

Reply

Marsh Posté le 02-09-2007 à 13:44:14    

Bon ça tourne?

Reply

Marsh Posté le 02-09-2007 à 14:08:05    

nn lol j ai pas, pu le faire , le server a lacher donc j ai trouver un autre hebergement mais il me permet plus de faire sa

Reply

Marsh Posté le 02-09-2007 à 16:27:34    

mais les différences qui sont faites sur le serveur B, tu t'en fous ?
ce serveur B est "caché du public" tant que le A marche c'est ça ?


---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le 02-09-2007 à 16:53:47    

nn , lol le second est accessible

Reply

Marsh Posté le 02-09-2007 à 17:05:20    

Bah dans ce cas ça va poser problème.
En plus, si des msg (par exemple) sont posté sur chaque serveur, t'auras tres probablement des ID identiques pour des msg différents, etc...


---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le 02-09-2007 à 17:52:39    

ok dc fodrai que j explike au gen que  aucune interaction ne peut etre effectuer sur les serveur secondaire

Reply

Marsh Posté le 02-09-2007 à 17:54:07    

euh, sinon tu peux forcer des ID paire sur l'un et des impaires sur l'autre, ou alors tu fais les maj en temps réel si la deuxieme BDD est accessible autrement que par "localhost" :)


---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le 02-09-2007 à 18:30:31    

lol pourquoi il mette pas un plugin sous joomla pour faire sa ....

Reply

Marsh Posté le 02-09-2007 à 22:45:11    

T'es sur que tu as pas le droit de répliquer ta base?

Reply

Marsh Posté le 02-09-2007 à 22:58:41    

je peut rien modifier sur mon hebergeur donc oui je suppose

Reply

Marsh Posté le 02-09-2007 à 23:13:24    

Faut pas supposer ;)
Bon au pire, il te reste le script php :spamafote:
 
Je suppose que tu as qu'une base?

Reply

Marsh Posté le 02-09-2007 à 23:27:30    

c bon g  le script en php quand meme ^^

Reply

Marsh Posté le 03-09-2007 à 10:15:21    

Pour mettre une réplication circulaire sans collision des autoincrément :
http://www.onlamp.com/pub/a/onlamp [...] cation.htm
 
En gros, tu dis à chaque serveur qu'il doit augmenter l'autoincrément de n (n devant être supérieur ou égal au nombre de serveur mysql prévus) et à chacun tu dis de commencer à un nombre différent (1 pour le premier, 2 pour le second, ...)
 
Evidement, ça ne sert à rien si on ne peut pas mettre en place de réplication ce qui semble être ton cas sur ton nouvel hébergeur d'après ce que tu nous dis.

Reply

Marsh Posté le 03-09-2007 à 20:02:39    

merci pour la reponse j aurai bien aimmer regarder ton lien mais  ton lien est mort

Reply

Marsh Posté le 03-09-2007 à 20:29:56    

omega2 a écrit :

Pour mettre une réplication circulaire sans collision des autoincrément :
http://www.onlamp.com/pub/a/onlamp [...] cation.htm
 
En gros, tu dis à chaque serveur qu'il doit augmenter l'autoincrément de n (n devant être supérieur ou égal au nombre de serveur mysql prévus) et à chacun tu dis de commencer à un nombre différent (1 pour le premier, 2 pour le second, ...)
 
Evidement, ça ne sert à rien si on ne peut pas mettre en place de réplication ce qui semble être ton cas sur ton nouvel hébergeur d'après ce que tu nous dis.


Le problème avec cette technique c'est que si tu ouvres de nouveaux serveurs, tu es bayzé :p :/
 
Sinon, tu peux utiliser un serveur "central" avec une bdd contactable a distance, qui se charge d'attribuer les ID.
Si le serveur central ne repond pas, soit tu ne fais rien, soit tu fais "en roue libre", soit avec un protocole en anneau (me demande pas comment faire, mais c'est une idée à creuser, d'ailleurs si c'est faisable il n'y a meme pas besoin d'un serveur central :p)
 
EDIT: mais ce serait vachement long, donc vaut mieux garder le serveur central et avoir ça en solution de secours si il est down ;)


Message édité par ZePRiNCE le 03-09-2007 à 20:33:37

---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le 04-09-2007 à 10:39:24    

ZePRiNCE > Quand on met en place une réplication circulaire avec un autoincrément supérieur à 1, on se débrouille pour se garder quelques places libres pour le jour où on a besoin de rajouter d'autres serveurs. Par contre, c'est vrai que le jour où on atteint la limite, on a plus d'autre choix que de l'augmenter si on veut rajouter d'autres serveurs et ça veut dire qu'on devra redémarrer les serveurs 1 par 1. A par si on a vraiment sous estimé les besoins (ou l'augmentation des besoins), c'est le genre de cas qui ne devrait pas arriver avant plusieurs années.
Pour la technique que tu proposes, je n'ai jamais entendu parler de solutions de ce genre avec mysql. D'ailleurs je n'ai jamais entendu parler d'un serveur central mysql capable de surcharger certaines valeurs du my.ini (ou my.cnf) des autres serveurs.  
 
narutopgm > Quand je l'avais posté, le lien marchait encore. Cherche "auto_increment_increment" dans google, t'en trouveras d'autres même si toutes les explications ne sont pas aussi bien faites que sur la page que je te proposais (mais qui a disparu :( ).

Message cité 1 fois
Message édité par omega2 le 04-09-2007 à 10:41:07
Reply

Marsh Posté le 04-09-2007 à 10:43:51    

omega2 a écrit :

Pour la technique que tu proposes, je n'ai jamais entendu parler de solutions de ce genre avec mysql. D'ailleurs je n'ai jamais entendu parler d'un serveur central mysql capable de surcharger certaines valeurs du my.ini (ou my.cnf) des autres serveurs.


Tu parles de l'attribution des ID par un serveur central ?
C'est parfaitement possible.
 
Les incrémentations "naturels" se font sur ce serveur central, puis on recupere l'id avec mysql_insert_id() et le serveur distant la receptionne (par un file_get_content() par exemple).
L'avantage d'utiliser mysql_insert_id() c'est que meme s'il y a plusieurs demande d'id pour la meme table au meme instant T, le serveur central ne fournira aucun doublon ;)

Message cité 1 fois
Message édité par ZePRiNCE le 04-09-2007 à 10:44:05

---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le 04-09-2007 à 10:46:33    

D'ailleurs pas besoin d'un file_get_content() si le serveur mysql central est joignable depuis l'exterieur (je pense).
 
Ou pas besoin qu'il le soit si on utilise file_get_content()
 
Au choix ;)
 
 
Au fait, c'est effectivement une methode tres mc gyver mais on fait ce qu'on peut ^^


Message édité par ZePRiNCE le 04-09-2007 à 10:49:39

---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le 04-09-2007 à 11:09:08    

ZePRiNCE a écrit :


Tu parles de l'attribution des ID par un serveur central ?
C'est parfaitement possible.
 
Les incrémentations "naturels" se font sur ce serveur central, puis on recupere l'id avec mysql_insert_id() et le serveur distant la receptionne (par un file_get_content() par exemple).
L'avantage d'utiliser mysql_insert_id() c'est que meme s'il y a plusieurs demande d'id pour la meme table au meme instant T, le serveur central ne fournira aucun doublon ;)

[:atlantis]  [:sprint] (je pensais quand même que t'avais une solution sérieuse à proposer)
 
Entre une solution propre, sérieuse et éprouvé mais qui demande le changement d'un paramètre tous les 4 ou 5 ans et une solution bidouille à mort, je préfaire la solution propre et sérieuse. [:airforceone]  
 
Je sais bien que le php permet de faire de la bidouille mais c'est pas une raison pour rajouter de la bidouille dans la gestion des bases de données.
 
En fait, ta solution n'est valable que dans un seul cas : quand on doit simuler une réplication par ce qu'on a besoin d'une réplication quasi temps réel sans pouvoir mettre en place une vrai réplication. Ceci dit, c'est le genre de cas où il vaut mieux réfléchir aux choix d'hébergements (ou des règles de sécurités) plutôt que de partir dans des solutions de contournements plus ou moins foireuses.

Reply

Marsh Posté le 04-09-2007 à 11:17:47    

Euh, ça peut etre fait tres proprement, tu créé une fonction request_id('table_user') par exemple, ça se connecte au mysql.central.com et tu obtiens ton id.
 
Le seul probleme, c'est que ça créé une connexion supplémentaire pour chaque ajout, et ce peutetre sur un autre continent, donc il faut que ce soit un serveur de kalitay...


Message édité par ZePRiNCE le 04-09-2007 à 11:18:46

---------------
A VENDRE: Razer Chroma ARGB Controller / Boitier / Support Triple Screen / Ventirad / Carte USB3
Reply

Marsh Posté le 04-09-2007 à 11:27:26    

T'as beau dire, même si c'est fait le plus proprement possible, ça reste quand même de la bidouille. Bon, dans le cas présent, il n'a pas le choix : il est obligé de partir dans de la bidouille s'il veut avoir une équivalent à la réplication sans changer d'hébergeur pour la base de donnée.

Reply

Marsh Posté le 04-09-2007 à 12:27:58    

POur les retardataires, il y a un merveilleux truc qui vient d'apparaitre mais non disponible sous windows encore: proxy mysql.
 
Avec ça plus de soucis de ce genre en utilisant différentes méthodes ;)

Reply

Marsh Posté le 04-09-2007 à 12:46:05    

C'est Mysql Proxy ;)
 
http://linuxfr.org/2007/08/09/22813.html
 
Effectivement, ça a l'air pas mal...

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed