Code pour sauvegarder automatiquement votre base de données MySQL

Voilà un article qui n’intéressera qu’une poignées des visiteurs, mais ayant pas mal travaillé sur le code, je pense que cela pourra être utile à de nombreuses personnes.

Tous ceux qui possèdent un site avec une base de données MySQL et notamment un blog (dotclear ou WordPress) savent combien cette base de données est importante, pour ne pas dire vitale au site.

La moindre erreur dans cette base peut rendre inutilisable le site ou le blog. Et combien d’entre-vous font une sauvegarde régulière de leur base ? Très peu je pense. Comme moi jusqu’à présent, qui ne faisait des sauvegardes que lorsque j’avais à toucher à la base. Désormais, c’est du passé, puisque mes bases de données de mes différents blogs se sauvegardent quotidiennement et de façon automatique !

C’est tout de même nettement plus simple.

Je suis chez OVH et il existe chez cet hébergeur un planificateur de tâches qui permet de lancer automatiquement un script de son choix.

Grâce à ce planificateur, vous pourrez donc lancer ce sript de sauvegarde quotidiennement.

Le code ci-dessous permet de sauvegarder l’intégralité de la base et les sauvegardes de plus de 7 jours sont effacées. Je sauvegarde donc ma base tous les jours…et j’en ai toujours 6 à disposition.

N’hésitez pas à poster des commentaires si vous souhaitez plus d’informations sur ce script ! Le fichier devra être enregistré avec l’extension php.

#!/usr/local/bin/php

<?php
// création d’une fonction comportant les identifiants de connexion au FTP :
function mysql_structure() {
$host = ‘*****’;
$user = ‘*****’;
$pass = ‘*****’;
$base = ‘*****’;

// création d’un fichier affichant en boucle le contenu des tuples de la base :

mysql_connect($host, $user, $pass);
mysql_select_db($base);
$tables = mysql_list_tables($base);
while ($donnees = mysql_fetch_array($tables))
{
$table = $donnees[0];
$res = mysql_query(« SHOW CREATE TABLE $table »);
if ($res)
{
$insertions = «  »;
$dumpsql[] = « DROP TABLE IF EXIST $table; »;
$tableau = mysql_fetch_array($res);
$tableau[1] .= « ; »;
$dumpsql[] = str_replace(« \n », «  », $tableau[1]);
$req_table = mysql_query(« SELECT * FROM $table »);
$nbr_champs = mysql_num_fields($req_table);
while ($ligne = mysql_fetch_array($req_table))
{
$insertions .= « INSERT INTO $table VALUES(« ;
for ($i=0; $i<=$nbr_champs-1; $i++)
{
$insertions .= « ‘ » . mysql_real_escape_string($ligne[$i]) . « ‘, « ;
}
$insertions = substr($insertions, 0, -2);
$insertions .= « );\n »;
}
if ($insertions != «  »)
{
$dumpsql[] = $insertions;
}
}
}
return implode(« \r », $dumpsql);
}
// creation d’une fonction file_put_content si le script est en PHP4 :

if(!function_exists(‘file_put_contents’)) {
function file_put_contents($filename, $data, $file_append = false) {
$fp = fopen($filename, (!$file_append ? ‘w+’ : ‘a+’));
if(!$fp) {
trigger_error(‘file_put_contents ne peut pas écrire dans le fichier.’, E_USER_ERROR);
return;
}
fputs($fp, $data);
fclose($fp);
}
}
// création du fichier de dump sur le même niveau que ce fichier .php

file_put_contents(« sqldump_ ».date(« d-n-Y »). ».sql », mysql_structure());

// effacement du fichier precedant (créé 7 jours plus tot)
$time_old = getdate(mktime()-(7*24*3600));
$an = $time_old['year'];
$mois = $time_old['mon'];
$jour = $time_old['mday'];
// formatage des jours à 1 chiffre

for($k=1; $k<10; $k++)
{
if ($jour==$k)
{
$jour=’0′.$jour;
}
}

$date_old=$jour.’-’.$mois.’-’.$an;
$file_old= »sqldump_ ».$date_old. ».sql »;
unlink($file_old);
?>