Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1685 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  Exportation tables Mysql > 2Mo

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Exportation tables Mysql > 2Mo

n°1297402
fluminis
Posté le 02-02-2006 à 14:41:42  profilanswer
 

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
mood
Publicité
Posté le 02-02-2006 à 14:41:42  profilanswer
 

n°1297412
jagstang
Pa Capona ಠ_ಠ
Posté le 02-02-2006 à 14:52:15  profilanswer
 

ton provider te fourni peut-être mysqldump ?

n°1297416
fluminis
Posté le 02-02-2006 à 14:55:10  profilanswer
 

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
n°1297420
gizmo
Posté le 02-02-2006 à 14:59:10  profilanswer
 

tu ne peux pas changer le max_exec_time?

n°1297443
fluminis
Posté le 02-02-2006 à 15:10:13  profilanswer
 

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
n°1297461
gizmo
Posté le 02-02-2006 à 15:20:05  profilanswer
 

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

n°1297471
fluminis
Posté le 02-02-2006 à 15:24:45  profilanswer
 

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
n°1297473
omega2
Posté le 02-02-2006 à 15:26:31  profilanswer
 

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.

n°1297483
fluminis
Posté le 02-02-2006 à 15:32:48  profilanswer
 

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
n°1297536
fluminis
Posté le 02-02-2006 à 16:11:56  profilanswer
 

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
mood
Publicité
Posté le 02-02-2006 à 16:11:56  profilanswer
 

n°1297593
jagstang
Pa Capona ಠ_ಠ
Posté le 02-02-2006 à 16:51:08  profilanswer
 

change de provider [:jagstang]

n°1297750
fluminis
Posté le 02-02-2006 à 19:18:57  profilanswer
 

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
n°1297781
Djebel1
Nul professionnel
Posté le 02-02-2006 à 19:43:52  profilanswer
 

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

n°1298275
omega2
Posté le 03-02-2006 à 09:00:27  profilanswer
 

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.

n°1298277
Djebel1
Nul professionnel
Posté le 03-02-2006 à 09:04:34  profilanswer
 

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
n°1298301
omega2
Posté le 03-02-2006 à 09:38:34  profilanswer
 

"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.

n°1298310
gizmo
Posté le 03-02-2006 à 09:45:44  profilanswer
 

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

n°1298327
Djebel1
Nul professionnel
Posté le 03-02-2006 à 10:05:23  profilanswer
 

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
n°1298329
fluminis
Posté le 03-02-2006 à 10:06:19  profilanswer
 

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
n°1298838
peter45
Posté le 03-02-2006 à 20:17:25  profilanswer
 

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
n°1299497
fluminis
Posté le 05-02-2006 à 22:01:51  profilanswer
 

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


---------------
http://poemes.iceteapeche.com - http://www.simuland.net
n°1319057
fluminis
Posté le 05-03-2006 à 18:16:38  profilanswer
 

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
n°1664200
squal le r​equin
Posté le 31-12-2007 à 05:24:46  profilanswer
 

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  :??:

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  Exportation tables Mysql > 2Mo

 

Sujets relatifs
[JBOSS et MySql] Pb de configurationcomparaison de tables en vue de faire un historique
[MySQL] problème avec la clause IN[MySQL] Problème d'indexation FullText
[PHP/MYSQL] création d'un service de blog[SQL Server] Listes des tables d'une base
importer une bases .sql vers mysql sur easyphp[Résolu]Requete soustractive MySQL ?
Rappatrier une BDD MySQL ...Requêtes avec mysql sur 2 tables
Plus de sujets relatifs à : Exportation tables Mysql > 2Mo


Copyright © 1997-2025 Groupe LDLC (Signaler un contenu illicite / Données personnelles)