Faire des backups, c’est bien. Les tester, c’est mieux

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));
}
?>

1 commentaire

Hebergeur

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

Laisser un commentaire