jan 4 2012
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 .phpfile_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 chiffrefor($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);
?>
jan 06, 2012 @ 16:05:51
Bonjour,
Cela fait un moment que je consulte vos billets, concernant votre actualité de dépannage informatique, je les trouve très intéressants et bien rédigés. Nous sommes nous-mêmes dépanneurs informatique implantée dans les Bouches du Rhône.
Longue vis à votre blog.
fév 13, 2012 @ 19:46:14
Bonjour,
J’ai découvert votre blog via un commentaire que vous avez laissé sur celui de Jean-Luc.
Je trouve que vos articles sont intéressants.
Et je vais tester le bout de code php.
Merci
mai 29, 2012 @ 20:15:06
Message d’erreur :
Parse error: syntax error, unexpected T_STRING …
A la ligne du « host », j’ai un ‘.’ dans le host je pense que là est le soucis, que dois-je modifier ?
mai 30, 2012 @ 08:29:39
A la place du ‘.’, vous devez mettre le host de vorte base de données.
juil 30, 2012 @ 16:41:00
Bonjour Guillaume !
Super site, un plaisir de te lire ancien dépanneur
Je voulais savoir si ton script s’applique pour 1&1 également ? Je pense pas mais c’est juste une confirm
A bientot ! Greg
août 06, 2012 @ 09:56:50
Malheureusement Gregory, je n’en sais rien du tout, jamais testé sur 1&1.