Nov 142015
 

Aujourd’hui, j’ai fait une connerie… J’ai droppé tout le contenu de ma base de donnée MySQL qui hébergeait ce site.

Bon, pas grave, j’ai des backups (mis en place il y a 3 ans) et ils sont régulièrement recréés, tout va bien.

Et bien non… Le script que j’utilise (choppé sur le net) ne m’encapsule pas les champs de type datetime entre quotes. Résultat: impossible de charger le dump.

J’ai heureusement un petit éditeur de texte super intelligent ContextEditor pour ne pas le citer qui me permet de faire de belles macro. 2 heures plus tard, j’ai enfin un dump qui s’importe. Ouf! plus de peur que de mal!

J’en ai profité pour corriger le script de backup, et SURTOUT, je l’ai testé (en détruisant à nouveau la DB, mais avec un backup de phpmyadmin et avec mon backup précédent).

Résultat : ça fonctionne. Et donc, j’en profite pour vous le taper ci-dessous (bande de veinards).

<?php
$MYSQL_DB='MAdb';
$MYSQL_USER='MONuser';
$MYSQL_PWD='MONpassword';
$MYSQL_SERVER='MonServeurLocal';
$MYSQL_DUMP='./mysql_'.date('l').'.dump';
// Exporting MYSQL
$infos=dumpMySQL($MYSQL_SERVER,$MYSQL_USER,$MYSQL_PWD,$MYSQL_DB);
$fichierDump = fopen($MYSQL_DUMP, "wb");
fwrite($fichierDump, $infos[0]);
fwrite($fichierDump, $infos[1]);
fwrite($fichierDump, $infos[2]);
fclose($fichierDump);

function dumpMySQL($serveur, $login, $password, $base)
{
    $connexion = mysql_connect($serveur, $login, $password);
    mysql_select_db($base, $connexion);
    $entete = "-- ----------------------\r\n";
    $entete .= "-- dump de la base ".$base." au ".date("d-M-Y")."\r\n";
    $entete .= "-- ----------------------\r\n\r\n\r\n";
    $creations = "";
    $insertions = "\r\n\r\n";
    $listeTables = mysql_query("show tables", $connexion);
    while($table = mysql_fetch_array($listeTables))
    {
        // si l'utilisateur a demandé la structure ou la totale
        {
            $creations .= "-- -----------------------------\r\n";
            $creations .= "-- creation de la table ".$table[0]."\r\n";
            $creations .= "-- -----------------------------\r\n";
            $listeCreationsTables = mysql_query("show create table ".$table[0], $connexion);
            while($creationTable = mysql_fetch_array($listeCreationsTables)){
              $creations .= $creationTable[1].";\r\n";
            }
        }
        // si l'utilisateur a demandé les données ou la totale
        {
            $donnees = mysql_query("SELECT * FROM ".$table[0]);
            $insertions .= "-- -----------------------------\r\n";
            $insertions .= "-- insertions dans la table ".$table[0]."\r\n";
            $insertions .= "-- -----------------------------\r\n";
            while($nuplet = mysql_fetch_array($donnees))
            {
                $insertions .= "INSERT INTO ".$table[0]." VALUES(";
                for($i=0; $i < mysql_num_fields($donnees); $i++)
                {
                  $FieldType=mysql_field_type($donnees, $i);
                  if($i != 0)
                     $insertions .=  ", ";
                  if($FieldType == "string" || $FieldType == "blob" || $FieldType == 'datetime')
                     $insertions .=  "'";
                  $insertions .= addslashes($nuplet[$i]);
                  if($FieldType == "string" || $FieldType == "blob" || $FieldType == 'datetime')
                    $insertions .=  "'";
                }
                $insertions .=  ");\r\n";
            }
            $insertions .= "\r\n";
        }
    }
    mysql_close($connexion);
    echo "Sauvegarde réalisée avec succès !!";
    return(array($entete,$creations,$insertions));
}
?>

  One Response to “Faire des backups, c’est bien. Les tester, c’est mieux”

  1. Une fois la sauvegarde effectuee, il est necessaire de tester les fichiers de backup. Cette manip doit etre faite regulierement pour s assurer de la qualite des fichiers de backups.  Si vous decouvrez le jour ou votre site est crashe que votre sauvegarde est frelatee .!

Leave a Reply to Hebergeur Cancel reply

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

(required)

(required)