Accueil
SAUVEGARDER UNE BASE DE DONNEES MYSQL SANS MYSQ_DUMP

Certains hebergeurs désactivent l'usage des commandes système  par soucis de sécurité. Chez FREE, cela se traduit par l'impossibilité d'utiliser la commande MYSQL_DUMP pour les sauvegardes automatiques. Cela n'a pas une énorme incidence dans la mesure où FREE a son propre système de sauvegarde et il reste aussi la possibilité d'utiliser la console PHPMYADMIN.

Le script suivant a pour ambition d'exporter les données contenues dans les tables en envoyant une copie par mail sous forme d'instructions SQL pour insérer l'information dans des tables préexistantes.

Avant de le mettre en oeuvre, il faut adapter la première section en fonction des paramètres de l'utilisateur. Tout le reste est automatique.


<?

//______________________________________
//partie à adapter

$url_base_de_donnees = 'sql.free.fr';
$nom_base_de_donnees = 'XXX';
$login_admin         = 'YYY';
$mot_de_passe        = 'ZZZ';
$recipiendaire       = 'adresse mail où envoyer la sauvegarde';
$accueil             = '<META http-equiv="refresh" content="0;URL=http://URL de la page à afficher après exécution du script">';
$from                = 'Content-type: text/html';

//fin de la partie modifiable
//______________________________________

$date_txt=date("d\- m\-Y \à H \H i ");
$contenu_mail='<html><body>';

$bdd = mysql_connect($url_base_de_donnees,$login_admin,$mot_de_passe) or die ("Impossible de se connecter &agrave; la base de donn&eacute;es");
mysql_select_db($nom_base_de_donnees,$bdd) or die ("Impossible d'ouvrir la base de donnees");

$liste_tables = mysql_list_tables("$bdd");

// pour chaque table
for ($i=0;$i<mysql_numrows($liste_tables);$i++)
  {
   $table_actuelle=mysql_result($liste_tables,$i,0);
   $nb_colonnes=mysql_num_rows(mysql_query("SHOW COLUMNS FROM $table_actuelle"));
   $contenu=mysql_query("SELECT * FROM $table_actuelle");

   // pour chaque ligne de la table en cours
   for ($j=0;$j<mysql_numrows($contenu);$j++)
     {
       $contenu_mail=$contenu_mail. 'INSERT INTO '.$table_actuelle.' VALUES (';

       // pour chaque colonne de la ligne en cours
       for($k=0;$k<$nb_colonnes;$k++)
           {
            // si 1ère colonne, la position des virgules est diff dans VALUES()
               if($k==0)
                {
                 $contenu_mail=$contenu_mail.'\''.mysql_result($contenu,$j,$k).'\'';
                }
               if($k!= 0)
                {
                $contenu_mail=$contenu_mail.',\''.mysql_result($contenu,$j,$k).'\'';
                }
            }
         $contenu_mail=$contenu_mail. ');<br>';
       }
    $contenu_mail=$contenu_mail. '<br>';

  }
mysql_close();

$contenu_mail=$contenu_mail.'</body></html>';
mail($recipiendaire, "sauvegarde du ".$date_txt, $contenu_mail,$from);


print "
  <script>
  alert('La sauvegarde vient d\'etre envoyée par mail ')
  </script>
      ";
print $accueil;
?>