Exportation tables Mysql > 2Mo

Exportation tables Mysql > 2Mo - PHP - Programmation

Marsh Posté le 02-02-2006 à 14:41:42    

Bonjour,
 
Voila je suis webmaster d'un site web qui grossis pas mal ces temps ci.
Et je suis confronté au problème suivant :
 
Comment exporter une table MySql de 3Mo, quand phpMyAdmin déclare forfait (temps d'execution dépassé)
Et que je suis sur un hebergement mutualisé et que je n'ai acces au serveur au mieux en ftp et sinon en http.
(bref pas de ssh quoi)
 
Auriez vous déjà rencontré ce problème ?
Comment puisque faire une sauvegarde de cette table ?
 
Merci d'avance
 
Fluminis


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 02-02-2006 à 14:41:42   

Reply

Marsh Posté le 02-02-2006 à 14:52:15    

ton provider te fourni peut-être mysqldump ?

Reply

Marsh Posté le 02-02-2006 à 14:55:10    

nop helas j'ai echangé un mail avec le support, mais ils ne veulent rien savoir et je n'ai pas acces avec le mysqldump.
Je n'ai qu'acces à php sur le serveur et comme phpMyAdmin, je vais etre confronté à la limite d'execution :(


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 02-02-2006 à 14:59:10    

tu ne peux pas changer le max_exec_time?

Reply

Marsh Posté le 02-02-2006 à 15:10:13    

bien... j'ai helas pas acces à la fonction 'exec' donc je ne peut pas lancer le 'mysqldump'
:(
bon bin je vais coder une fonction d'exportation à la main


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 02-02-2006 à 15:20:05    

je parle des paramètres du php.ini, pas de exec...

Reply

Marsh Posté le 02-02-2006 à 15:24:45    

pas acces non plus au php.ini, je n'ai acces a rien du tout à par excécuter un script php. (hebergement mutualisé)


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 02-02-2006 à 15:26:31    

S'il a pas accés à mysqldump, il a surement pas accés au php.ini .
fluminis > Je crainds qu'en effet la seule solution, c'est de faire un script que t'apelle plusieurs fois d'affilé avec un compteur différent afin qu'il sauve le contenu de la table en plusieurs fois.

Reply

Marsh Posté le 02-02-2006 à 15:32:48    

omega2> ouinnn ! pourquoi moi !
bon bin alors c'est parti pour le script de la mort qui tue.


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 02-02-2006 à 16:11:56    

Bon voila mon script, c'est surement pas le plus beau script que j'ai jamais fait, je l'ai fait dans l'urgence, mais peu etre que ça servira à quelqu'un donc le voila :
 

Code :
  1. <?
  2. //Configuration
  3. $file  = "export.sql"; //nom du fichier
  4. $nb    = 1000;        //nombre de lignes à ecrire à chaque fois
  5. $table = "poemes";  //nom de la table à sauvegarder
  6. //mes fonctions de connection à la bdd
  7. //mettez ici mysql_connect et autre truc du genre
  8. include("utils.inc.php" );
  9. if(empty($_GET['ok'])){
  10. //pas d'argument on affiche un lien
  11. $text = "<a href='".$_SERVER['PHP_SELF']."?ok=1&start=0'>Commencer l'exportation</a>";
  12. }else{
  13. $sql = "SELECT * FROM ".$table." LIMIT ".$_GET['start'].",".$nb;
  14. if($_GET['start'] == 0){
  15.  //on ecrase le fichier
  16.  $fp = fopen($file, 'w');
  17. }else{
  18.  //on ecrit à la fin du fichier
  19.  $fp = fopen($file, 'a');
  20.  fwrite($fp, "#-- ".$_GET['start']."\n" );
  21. }
  22. $i=0;
  23. //execute la requete sql
  24. if($res = mysql_query($sql)){
  25.  while($row = mysql_fetch_assoc($res)){
  26.   //pour chaque ligne on va l'ecrire dans le fichier
  27.   $insert = "INSERT INTO ".$table." (";
  28.   $values = " ) VALUES (";
  29.   $and = "";
  30.   foreach($row as $key => $value){
  31.    $insert .= $and . $key;
  32.    $values .= $and . "'".mysql_escape_string($value)."'";
  33.    $and = ",";
  34.   }
  35.   $insert .= $values." );\n";
  36.   //ecriture dans le fichier
  37.   fwrite($fp, $insert);
  38.   $i++;
  39.  }
  40. }
  41. fclose($fp);
  42. //Qu'affiche t'on ?
  43. if($i == 0){
  44.  $text = "Rien d'ecrit. On s'arrete là";
  45. }else if($i < $nb){
  46.  $text = $_GET['start']." =&gt; ".$i." row(s) écrite(s). On s'arrete là";
  47. }else{
  48.  $text = $_GET['start']." =&gt; ".$i." row(s) écrite(s).<br/><a href='".$_SERVER['PHP_SELF']."?ok=1&start=".($_GET['start']+$nb)."'>Continuer l'exportation</a>";
  49. }
  50. }
  51. ?>
  52. <html>
  53. <body>
  54. <? echo $text; ?>
  55. </body>
  56. </html>


 
bien sur de nombreuses optimisations pourraient etre faites...
 
++
fluminis


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 02-02-2006 à 16:11:56   

Reply

Marsh Posté le 02-02-2006 à 16:51:08    

change de provider [:jagstang]

Reply

Marsh Posté le 02-02-2006 à 19:18:57    

jagstang a écrit :

change de provider [:jagstang]


 
Quelle bonne idée, encore faut il que j'exporte la base de données vers le nouveau, et je reviens au problème initial ;)
 


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 02-02-2006 à 19:43:52    

clair que ce provider abuse un peu lol, surtout si tu les as contacté et demandé gentillement

Reply

Marsh Posté le 03-02-2006 à 09:00:27    

pourquoi il abuserait?
L'accés à mysqldump ou au php.ini n'est pas un du de base qui devrait être fournis avec le moindre hébergement de site en php.
 
Aprés tout est une question de prix et de performance, on ne peut pas demander les même supléments sans surcout à un hébergeur gratuit, à un hébergeur payant qu'a des machines de folies, à un hébergeur payant qui laisse ramer les sites pour le même prix que l'autre et à un hébergeur payant qu'est trois fois plus cher que les concurents.

Reply

Marsh Posté le 03-02-2006 à 09:04:34    

non mais lui laisser télécharger ou lui envoyer les fichiers de sa base, si ça fait pas des tonnes de giga, ça me parait pas abusif ^^


Message édité par Djebel1 le 03-02-2006 à 09:05:01
Reply

Marsh Posté le 03-02-2006 à 09:38:34    

"Hébergement mutualisé" A ton avis, ca ferait combien de giga justement le total de toutes les bases des sites héberger sur une même machine?
 
A coup de 2Mo par ci, 15Mo par là, 500ko pour le petit nouveau ... ca peut monter trés trés vite.
 
IL aurait un ordi que pour lui, alors là oui, ca serait abuser de pas permettre un mysqldump journalier. Mais sur du mutualisé, je trouve abuser de dire que l'hébergeur abuse de ne pas le permettre alors qu'on ne sait même pas qui est son hébergeur ni quelle formule d'hébergement il a choisit.

Reply

Marsh Posté le 03-02-2006 à 09:45:44    

un simple tracert t'aurais appris qu'il est chez online.net, qui est l'un des pires hébergeurs qui soit [:kiki]

Reply

Marsh Posté le 03-02-2006 à 10:05:23    

omega2 a écrit :

A coup de 2Mo par ci, 15Mo par là, 500ko pour le petit nouveau ... ca peut monter trés trés vite.


ok je m'incline  :kaola:


Message édité par Djebel1 le 03-02-2006 à 10:05:34
Reply

Marsh Posté le 03-02-2006 à 10:06:19    

Je suis effectivement chez online.net, mais ne va pas croire que le site dans ma signature est forcement celui pour lequel je pose des questions ;)


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 03-02-2006 à 20:17:25    

Bonjour Fluminis,
d'après ce que je peux lire dans les réponses à ton message, je fais partie de la pire espèce puisque je suis le webmaster de  deux sites hébergés chez online et free.
 
Je viens à l'instant de sauvegarder sur Free la base de données d'un forum : le fichier texte fait un peu plus de 11 Mo ; temps d'exécution de la première sauvegarde : 27 secondes, j'ai recommencé : 17 secondes (phpinfo() sur Free donne ==> max_execution_time 30).
 
Bien entendu, je n'utilise pas phpmyadmin mais un script PHP que j'ai écrit et qui utilise la librairie bz2.
Je récupère ainsi un fichier compressé .bz2 qui ne fait que 2,7 Mo. Tu peux de rendre compte que le gain de compression est important.
 
Si l'exécution du script dépasse le temps alloué par le serveur, il suffit de l'améliorer pour présélectionner certaines tables afin de fractionner la sauvegarde en plusieurs étapes. Cela ne m'est jamais encore arrivé.
 
Pour le décompresser sous Windows, j'utilise l'excellent freeware Izarc.
Voici le début de ce script (je n'ai pas encore prévu de le distribuer, mais les lignes suivantes contiennent l'essentiel) :

Code :
  1. <?php
  2. require("../passe/conf.php" );
  3. $db_link = mysql_connect($sql_serveur,$sql_user,$sql_passwd);
  4. $rep_sauve = "secret";
  5. $rep = $rep_sauve."/";
  6. $nom_fichier = $rep.$sql_bdd."_".date('Y_m_d_H_i_s').".bz2";
  7. $fp = bzopen($nom_fichier, "w" );
  8.     //  Récupération de l'heure
  9. $datej = strftime("%A %d %B %Y à %H:%M:%S ",time());
  10.     $en_tete = "
  11. # Serveur : ".$_SERVER ['SERVER_NAME']."\n
  12. # Généré le : ".$datej."\n
  13. # Version de PHP : ".phpversion()."\n
  14. # Base de données : `".$sql_bdd."`\n
  15. ";
  16. $base = mysql_list_tables($sql_bdd);
  17. $nbre_tables = mysql_num_rows($base);
  18. $en_tete .= "# Nombre de tables sauvegardées : ".$nbre_tables."
  19. \n#\n";
  20. bzwrite($fp, $en_tete);
  21.     bzwrite($fp, $heure."\n" );
  22. for ($tb = 0; $tb< $nbre_tables; $tb++)
  23. {
  24. $nomTable = mysql_tablename($base, $tb);
  25. $request = "SHOW CREATE TABLE`".$nomTable;
  26. $result = mysql_db_query($sql_bdd, $request, $db_link);
  27.         $affiche = mysql_fetch_array($result);
  28. $structure = $affiche[1].";\n";
  29. $structure = str_replace("CREATE TABLE", "CREATE TABLE IF NOT EXISTS", $structure);
  30.   bzwrite($fp,"................etc.


Message édité par peter45 le 03-02-2006 à 20:27:56
Reply

Marsh Posté le 05-02-2006 à 22:01:51    

Merci pour le script je prends et vais faire les modifs sur le miens en consequence


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 05-03-2006 à 18:16:38    

Ce topic est vieux comme le monde, mais bon...
Je le r'ouvre juste pour dire que j'ai finalement trouvé un script de sauvegarde de base de données très efficace :
http://www.webcron.org/webcronsave.php
avis aux amateurs
++


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
Reply

Marsh Posté le 31-12-2007 à 05:24:46    

il est super ce script, je suis en train de le tester mais dans la configuration je ne peux pas choisir l'heure ni rien, pourtant dans la documentation ça y est  :??:

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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