Nous sommes le Sam 28 Juin, 2025 04:44
Supprimer les cookies

[résolu]Sauvegarde avec PHPMyadmin

Sur le logiciel libre en général ou un logiciel libre en particulier

Lun 02 Nov, 2009 14:47

Je recherche un script PHP qui ferait l'équivalent de l'opération "Exporter" de PHPMyadmin; ceci adfin da faire des sauvegardes du site.

ce script serait lancer deapuis une page (en PHP) du site, et le résultat serait exporter dans un fichier texte (un peu comme l'export en csv).

Merci d'avance...
Dernière édition par dedenimes le Mer 04 Nov, 2009 15:29, édité 1 fois au total.
Raison: passé en résolu
Marc MOREL

Messages : 3

Lun 02 Nov, 2009 15:30

J'avais un jour trouvé ce script:
Code: Tout sélectionner
<?php
//réglages base
$host = "localhost"; // Serveur
$db1 = "nom_de_la_base";  // Base de données
$user = "utilisateur"; // Nom d'utilisateur de la base
$pw = "mot_de_passe"; // Mot de passe
$use_date = 1; // Utiliser la date dans le nom du fichier de sauvegarde 0 = non / 1 = oui

//répertoire des backup
$path = "../backup_mysql/"; 
//Connexion base de données

$conn_id = mysql_connect($host,$user,$pw) or die(mysql_error());

//réglages commentaires du fichier sql
$dump1     = "# Sauvegarde créée le ";
$dump2     = "# Base de données: ";
$dump3     = "# Nom de la table: ";

//recherche toutes les bases du serveur
$database = $db1;
$zaehler = 0;
$start=0;

// generate filesuffix if it should be used
if($use_date == 1)
{
   $datum = "_".date('Y-m-d');   
}
else
{
   $datum = "";   
}

$file_name = $path.'backup_'.$database.$datum.".sql";

$file_old = $path.$database.".old";
$aktime=date("d-m-Y H:i");
$db_name = $dump1."$aktime\n";
$db_name.= $dump2."$database \n\n";
if (file_exists($file_name)){unlink($file_name);}
$fd = fopen($file_name,"a+");

fwrite($fd, $db_name);
fclose($fd);     
 
// Tabellenname Array auslesen und aufbauen
$tbl_array = array(); $c = 0;
$result2 = mysql_list_tables($database);
for($x=0; $x<mysql_num_rows($result2); $x++)
{    
      $tabelle = mysql_tablename($result2,$x);
       if ($tabelle <>"") {
                       $tbl_array[$c] = mysql_tablename($result2,$x); $c++;$zaehler++;
                      }
}                        

flush();

// Start Ausgabe und Berechnung
for ($y = 0; $y < $c; $y++){ 
   $tabelle=$tbl_array[$y];

// Struktur der Tabelle einlesen
    $def = "";
    $def .= "DROP TABLE IF EXISTS $tabelle; \n";
    $def .= "CREATE TABLE $tabelle (\n";
    $result3 = mysql_db_query($database, "SHOW FIELDS FROM $tabelle",$conn_id);
    while($row = mysql_fetch_array($result3)) {
        $def .= "    $row[Field] $row[Type]";
        if ($row["Default"] != "") $def .= " DEFAULT '$row[Default]'";
        if ($row["Null"] != "YES") $def .= " NOT NULL";
          if ($row['Extra'] != "") $def .= " $row[Extra]";
           $def .= ",\n";
     }
     $def = ereg_replace(",\n$","", $def);
     $result3 = mysql_db_query($database, "SHOW KEYS FROM $tabelle",$conn_id);
     while($row = mysql_fetch_array($result3)) {
          $kname=$row['Key_name'];
          if(($kname != "PRIMARY") && ($row['Non_unique'] == 0)) $kname="UNIQUE|$kname";
          if(!isset($index[$kname])) $index[$kname] = array();
          $index[$kname][] = $row['Column_name'];
     }
     while(list($xy, $columns) = @each($index)) {
          $def .= ",\n";
          if($xy == "PRIMARY") $def .= "   PRIMARY KEY (" . implode($columns, ", ") . ")";
          else if (substr($xy,0,6) == "UNIQUE") $def .= "   UNIQUE ".substr($xy,7)." (" . implode($columns, ", ") . ")";
          else $def .= "   KEY $xy (" . implode($columns, ", ") . ")";
     }

     $def .= "\n); \n";
     
// Ende Struktur Modul
$db = @mysql_select_db($database,$conn_id);

$tabelle="".$tabelle;
$ergebnis=array();
$tbl_name = $dump3."$tabelle \n\n";
$fd = fopen($file_name,"a+");
fwrite($fd, $tbl_name.$def);
fclose($fd);

unset($data);
if ($tabelle>""){ 
    $ergebnis[]=@mysql_select_db($database,$conn_id);
    $result=mysql_query("select * from $tabelle");
        $anzahl= mysql_num_rows ($result);
    $spaltenzahl = mysql_num_fields($result);
        $data='';
        for ($i=0;$i<$anzahl;$i++) {
                $zeile=mysql_fetch_array($result);
       
                $data.="insert into $tabelle (";
        for ($spalte = 0; $spalte < $spaltenzahl;$spalte++) {
              $feldname = mysql_field_name($result, $spalte);
              if($spalte == ($spaltenzahl - 1))
          {
            $data.= $feldname;
          }
          else
          {
            $data.= $feldname.",";
          }
        };
        $data.=") VALUES (";
                for ($k=0;$k < $spaltenzahl;$k++){
          if($k == ($spaltenzahl - 1))
          {
                        $data.="'".addslashes($zeile[$k])."'";
                  }
          else
          {
                        $data.="'".addslashes($zeile[$k])."',";
                  }
        }
                $data.= ");\n";
        }
$data.= "\n";
}
else
{
      $ergebnis[]= "Aucune table!";
}

$zeit = (date("d_m_Y"));
$fd = fopen($file_name,"a+");
$zeit = time() - $start;
//$speed = $speed+$zeit;

for ($i3=0;$i3<count($ergebnis);$i3++){
      fwrite($fd, $data);
        fclose($fd);   
}
}

$groesse = filesize($file_name) / 1024;
$place =  $groesse; //$place+$groesse;

$out_dump="<p><label>Base de données&nbsp;:</label>$db1<br />";
$out_dump.="<label>Nombre de tables&nbsp;:</label>$zaehler<br />";
$out_dump.="<label>Taille&nbsp;:</label>".number_format($groesse,2)."&nbsp;KB</p>";

$out_dump.='<p class="confirmation">La sauvegarde a bien été effectuée. Le fichier se trouve dans le dossier &laquo;&nbsp;'.$path.'&nbsp;&raquo;.</p>';

echo $out_dump;

?>


Je ne sais si ça marche vraiment bien, mais il me semble.

Sinon, tu peux récupérer les sources de phpmyadmin, et retrouver le script qui permet d'exporter la base...

Peut-être autre chose en cherchant un peu: http://www.google.ch/search?q=dump+mysql
lebendre

Messages : 1417
Géo : Sur ma montagne

Lun 02 Nov, 2009 19:27

phpMyBackupPro fait ça très bien...
Invité

Mer 04 Nov, 2009 09:53

J'ai essayé "phpMyBackupPro" et ça marche impécable. En plus, c'est en français, ce qui ne gâche rien.
Merci beaucoup.
Marc MOREL

Messages : 3

Mer 04 Nov, 2009 14:50

lebendre a écrit:J'avais un jour trouvé ce script:
Code: Tout sélectionner
<?php
//réglages base
$host = "localhost"; // Serveur
$db1 = "nom_de_la_base";  // Base de données
$user = "utilisateur"; // Nom d'utilisateur de la base
$pw = "mot_de_passe"; // Mot de passe
$use_date = 1; // Utiliser la date dans le nom du fichier de sauvegarde 0 = non / 1 = oui

//répertoire des backup
$path = "../backup_mysql/"; 
//Connexion base de données

$conn_id = mysql_connect($host,$user,$pw) or die(mysql_error());

//réglages commentaires du fichier sql
$dump1     = "# Sauvegarde créée le ";
$dump2     = "# Base de données: ";
$dump3     = "# Nom de la table: ";

//recherche toutes les bases du serveur
$database = $db1;
$zaehler = 0;
$start=0;

// generate filesuffix if it should be used
if($use_date == 1)
{
   $datum = "_".date('Y-m-d');   
}
else
{
   $datum = "";   
}

$file_name = $path.'backup_'.$database.$datum.".sql";

$file_old = $path.$database.".old";
$aktime=date("d-m-Y H:i");
$db_name = $dump1."$aktime\n";
$db_name.= $dump2."$database \n\n";
if (file_exists($file_name)){unlink($file_name);}
$fd = fopen($file_name,"a+");

fwrite($fd, $db_name);
fclose($fd);     
 
// Tabellenname Array auslesen und aufbauen
$tbl_array = array(); $c = 0;
$result2 = mysql_list_tables($database);
for($x=0; $x<mysql_num_rows($result2); $x++)
{    
      $tabelle = mysql_tablename($result2,$x);
       if ($tabelle <>"") {
                       $tbl_array[$c] = mysql_tablename($result2,$x); $c++;$zaehler++;
                      }
}                        

flush();

// Start Ausgabe und Berechnung
for ($y = 0; $y < $c; $y++){ 
   $tabelle=$tbl_array[$y];

// Struktur der Tabelle einlesen
    $def = "";
    $def .= "DROP TABLE IF EXISTS $tabelle; \n";
    $def .= "CREATE TABLE $tabelle (\n";
    $result3 = mysql_db_query($database, "SHOW FIELDS FROM $tabelle",$conn_id);
    while($row = mysql_fetch_array($result3)) {
        $def .= "    $row[Field] $row[Type]";
        if ($row["Default"] != "") $def .= " DEFAULT '$row[Default]'";
        if ($row["Null"] != "YES") $def .= " NOT NULL";
          if ($row['Extra'] != "") $def .= " $row[Extra]";
           $def .= ",\n";
     }
     $def = ereg_replace(",\n$","", $def);
     $result3 = mysql_db_query($database, "SHOW KEYS FROM $tabelle",$conn_id);
     while($row = mysql_fetch_array($result3)) {
          $kname=$row['Key_name'];
          if(($kname != "PRIMARY") && ($row['Non_unique'] == 0)) $kname="UNIQUE|$kname";
          if(!isset($index[$kname])) $index[$kname] = array();
          $index[$kname][] = $row['Column_name'];
     }
     while(list($xy, $columns) = @each($index)) {
          $def .= ",\n";
          if($xy == "PRIMARY") $def .= "   PRIMARY KEY (" . implode($columns, ", ") . ")";
          else if (substr($xy,0,6) == "UNIQUE") $def .= "   UNIQUE ".substr($xy,7)." (" . implode($columns, ", ") . ")";
          else $def .= "   KEY $xy (" . implode($columns, ", ") . ")";
     }

     $def .= "\n); \n";
     
// Ende Struktur Modul
$db = @mysql_select_db($database,$conn_id);

$tabelle="".$tabelle;
$ergebnis=array();
$tbl_name = $dump3."$tabelle \n\n";
$fd = fopen($file_name,"a+");
fwrite($fd, $tbl_name.$def);
fclose($fd);

unset($data);
if ($tabelle>""){ 
    $ergebnis[]=@mysql_select_db($database,$conn_id);
    $result=mysql_query("select * from $tabelle");
        $anzahl= mysql_num_rows ($result);
    $spaltenzahl = mysql_num_fields($result);
        $data='';
        for ($i=0;$i<$anzahl;$i++) {
                $zeile=mysql_fetch_array($result);
       
                $data.="insert into $tabelle (";
        for ($spalte = 0; $spalte < $spaltenzahl;$spalte++) {
              $feldname = mysql_field_name($result, $spalte);
              if($spalte == ($spaltenzahl - 1))
          {
            $data.= $feldname;
          }
          else
          {
            $data.= $feldname.",";
          }
        };
        $data.=") VALUES (";
                for ($k=0;$k < $spaltenzahl;$k++){
          if($k == ($spaltenzahl - 1))
          {
                        $data.="'".addslashes($zeile[$k])."'";
                  }
          else
          {
                        $data.="'".addslashes($zeile[$k])."',";
                  }
        }
                $data.= ");\n";
        }
$data.= "\n";
}
else
{
      $ergebnis[]= "Aucune table!";
}

$zeit = (date("d_m_Y"));
$fd = fopen($file_name,"a+");
$zeit = time() - $start;
//$speed = $speed+$zeit;

for ($i3=0;$i3<count($ergebnis);$i3++){
      fwrite($fd, $data);
        fclose($fd);   
}
}

$groesse = filesize($file_name) / 1024;
$place =  $groesse; //$place+$groesse;

$out_dump="<p><label>Base de données&nbsp;:</label>$db1<br />";
$out_dump.="<label>Nombre de tables&nbsp;:</label>$zaehler<br />";
$out_dump.="<label>Taille&nbsp;:</label>".number_format($groesse,2)."&nbsp;KB</p>";

$out_dump.='<p class="confirmation">La sauvegarde a bien été effectuée. Le fichier se trouve dans le dossier &laquo;&nbsp;'.$path.'&nbsp;&raquo;.</p>';

echo $out_dump;

?>


Je ne sais si ça marche vraiment bien, mais il me semble.

Sinon, tu peux récupérer les sources de phpmyadmin, et retrouver le script qui permet d'exporter la base...

Peut-être autre chose en cherchant un peu: http://www.google.ch/search?q=dump+mysql


Merci du tuyau. pas le temps de tester. A première vue ça a l'air de marcher...
Marc MOREL

Messages : 3

Qui est en ligne ?

Utilisateur(s) parcourant actuellement ce forum : Aucun utilisateur inscrit