Méthode de sauvegarde et de restauration d'un site web et de sa base SQL

Réactiver un site internet en moins d'une heure.

Clavier lumineux Macbook Pro

Sauvegarder son site web et sa base SQL (Partie 1)

Comme pour votre ordinateur, la conservation d'une copie de sauvegarde de votre site web est impérative.

1- Préparer la sauvegarde du site web :

Ayez toujours sur votre ordinateur la copie de votre site web. Si vous avez installé un blog, forum, cms, e-commerce, conservez-en une copie opérationnelle avec les fichiers config, htaccess, les plug-ins, modules additionnels, thèmes, templates et vos modifications.

Si vous mettez votre logiciel web à jour, faites la même chose avec votre sauvegarde.
Si votre site contient un dossier d'upload et des logs, allez les récupérer régulièrement. Pour simplifier cette dernière tâche, le script ci-dessous va faire une sauvegarde au format ZIP d'un fichier de log. Au lieu de télécharger une centaine de petits fichiers textes, tout sera regroupé en un fichier ZIP.

Code PHP :
<?php
/* Assurez-vous que le dossier de destination de la sauvegarde est cree. Il peut etre soit dans le dossier www ou ailleurs. Ici nous le mettons ailleurs*/
/* Modifiez vos parametres */
$uploads = "/home/loginftp/www/uploads"; /* chemin absolu du dossier uploads a sauvegarder sans le / final */
$repsauvegarde = "/home/loginftp/sauvegarde/";  /* chemin absolu du repertoire de sauvegarde */
$zipuploads = "mesuploads"; /* nom du fichier zip de la sauvegarde sans mettre le .zip a la fin */

/* On va mettre 2 dossiers differents dans un meme fichier zip */
/* Modifiez vos parametres */
$logs1 = "/home/loginftp/www/telechargement/logs"; /* chemin absolu du dossier logs des telechargements a sauvegarder sans le / final */
$logs2 = "/home/loginftp/www/session/logs"; /* chemin absolu du dossier logs des sessions a sauvegarder sans le / final */
$repsauvegarde = "/home/loginftp/sauvegarde/";  /* chemin absolu du repertoire de sauvegarde */
$ziplogs = "meslogs"; /* nom du fichier zip de la sauvegarde sans mettre le .zip a la fin */
/* C'est tout. Placez ce fichier par FTP quelque part sur votre serveur Web, dans un endroit discret. */
/* Puis ouvrez-le avec votre navigateur web et suivez les instructions. */

echo "<html><body>";
echo "1. Ce script cree automatiquement une sauvegarde du dossier $uploads \n<br>\n<br>";
echo "Le dossier est en cours de sauvegarde.......\n<br>";
if (system("zip -qr -5 $repsauvegarde$zipuploads $uploads"));
echo "C'est fait. \n<br>";
echo "\n<br>";
echo "2. Sauvegarde des dossiers $logs1 et $logs2 \n<br>\n<br>";
echo "Les dossiers sont en cours de sauvegarde.......\n<br>";
if (system("zip -qr -5 $repsauvegarde$ziplogs $logs1"));
if (system("zip -qr -5 $repsauvegarde$ziplogs $logs2"));
echo "\n<br>";
echo "C'est fini. Vous pouvez recuperer la sauvegarde par FTP dans le dossier $repsauvegarde .\n<br>N'oubliez pas d'effacer ces fichiers de votre serveur par FTP car ils peuvent contenir des mots de passe ou des informations personnelles.\n<br>\n<br></body></html>";
?> 

Utiliser Tar, GZIP ou BZ2 au lieu du ZIP. Il y a une limite au tar par rapport au zip: celle de combiner plusieurs dossiers différents dans une même archive. Avec tar, on ne peut compresser qu'un répertoire avec ses sous dossiers ou alors combiner plusieurs archives tar. Donc, pour mon exemple de script de sauvegarde on peut remplacer la ligne 20:

Code PHP :
if (system("zip -qr -5 $repsauvegarde$zipuploads $uploads"));

par ça pour le Tar Gzip:

Code PHP :
if (system("tar -czf $repsauvegarde$zipuploads.tar.gz $uploads"));

ou ça pour le Tar Bzip2 :

Code PHP :
if (system("tar -cjf $repsauvegarde$zipuploads.tar.bz2 $uploads"));

À noter que tar bzip2 compresse mieux que tar gzip qui, lui aussi, est souvent plus efficace que le Zip.

ATTENTION : ne cherchez pas à faire un fichier ZIP de tout votre hébergement, cela risque de ne pas marcher. Il y a 2 raisons à cela : le temps d'exécution d'un script est souvent limité de 30 à 120 secondes et la mémoire RAM allouée au traitement du script et à la manipulation des fichiers est limitée en fonction de votre offre d'hébergement (de 32 Mo à 256 Mo, ce qui est insuffisant pour une sauvegarde de votre site web).
Pour connaitre ces limites, créez un fichier info.php avec le code suivant :

Code PHP :
<?php
phpinfo();
?>

Envoyez ce fichier par FTP, ouvrez-le avec votre navigateur web, et cherchez les lignes : max_execution_time (temps d'exécution du script), memory_limit et post_max_size pour connaitre la taille maximum du fichier à traiter.

2- Préparer la sauvegarde de la base MySQL :

La sauvegarde de la base MySQL s'appelle un “dump”. On peut la faire depuis votre interface phpMyadmin, ou depuis un script php.

a) Sauvegarde par Script PHP :

L'avantage de la sauvegarde par script PHP est sa rapidité et la maitrise de quelques options qu'on ne peut contrôler avec phpMyadmin, notamment le problème d'encodage des caractères accentués (appelé jeu de caractères). C'est pourquoi je préfère cette solution.

Code PHP :
<?php
/* Modifiez vos parametres MySQL */
$db_server   = "ServeurMySQL";
$db_name     = "NomDeLaBaseSQL"; 
$db_username = "IdentifiantSQL";
$db_password = "MotDePasseSQL";
$db_charset = "utf8"; /* mettre utf8 ou latin1 */
/* C'est tout. Placez ce fichier par FTP quelque part sur votre serveur Web, dans un endroit discret. */
/* Puis ouvrez-le avec votre navigateur web et suivez les instructions. */

echo "<html><body>Ce script cree une sauvegarde de la base de donnees avec l'encodage du jeu de caracteres $db_charset .  \n<br>\n<br>Le fichier de sauvegarde est au meme endroit que ce script.  \n<br>\n<br>";
echo "Votre base est en cours de sauvegarde.......\n<br>";
if (system("mysqldump --host=$db_server --user=$db_username --password=$db_password -C -Q -e --default-character-set=$db_charset $db_name | gzip -c > $db_name-$db_charset.sql.gz"));
echo "\n<br>";
echo "C'est fini. Vous pouvez recuperer le fichier de sauvegarde. Il s'appelle: <a href=\"$db_name-$db_charset.sql.gz\">$db_name-$db_charset.sql.gz</a> (faites un clic-droit, et enregistrez sous... , ou enregistrez la cible du lien sous...) \n<br>\n<br>N'oubliez pas d'effacer ce fichier de votre serveur par FTP car il contient des mots de passe.\n<br>\n<br></body></html>";
?> 

b) Sauvegarde par phpMyadmin :

Pour faire une sauvegarde de votre base MySQL actuelle connectez-vous à votre interface phpMyadmin. Entrez le nom de la base SQL et son mot de passe, puis en haut de la colonne de gauche, cliquez sur le nom de la base. En haut de la page centrale, cliquez sur l'onglet “Exporter”. La page Exporter affiche une version simplifiée qui devrait suffire la plupart du temps. Choisissez l'export au format SQL et cliquez sur le bouton Exécuter. Pour sélectionner certaines tables, choisissez la méthode personnalisée et cochez les cases des tables que vous voulez exporter. Vous enregistrez la sortie vers un fichier, avec un jeu de caractère qui devrait être UTF-8 par défaut, et si la base de données est grosse, vous pouvez la compresser au format GZIP. Les autres cases à cocher par défaut devraient être acceptables, sauf si vous savez ce que vous faites, et enfin cliquez sur le bouton Exécuter. Et n'oubliez pas de vous déconnecter une fois terminé en cliquant sur l'icône Déconnecter en haut à gauche.

Après la sauvegarde, la restauration…


Restaurer son site web et sa base SQL (Partie 2)

3- Restaurer le site web :

Cela est facile. Tout d'abord, si vous avez modifié les droits des fichiers en 404 ou 444 et dossier en 505 ou 555 comme expliqué dans un article, vous ne pourrez les supprimer ou les remplacer. Refaites les commandes en donnant aux fichiers les droits 604 ou 644 aux fichiers et 705 ou 755 aux dossiers. Puis effacez complètement votre site web. Vous ne savez pas quelles traces et fichiers cachés a laissé le pirate, il faut rebâtir sur une base saine. Ensuite, par FTP envoyez votre sauvegarde vers votre site. Puis remodifiez les droits des fichiers et dossiers comme discuté précédemment.

4- Restaurer la base SQL :

Si votre sauvegarde est à jour, vous avez l'esprit tranquille. Si votre site est très actif et qu'il s'est passé trop de temps entre votre dernière sauvegarde et le piratage, faites une sauvegarde de la base vieille d'une semaine comme expliquée ci-dessus. Cependant, vous n'aurez pas la certitude que cette base est saine.

a) Restauration par phpMyadmin :

Contrairement à la sauvegarde, la restauration par phpMyadmin a une limite : la taille maximum autorisée pour uploader un fichier par le Web. Cette taille varie en fonction de votre offre d'hébergement de 16 à 64 Mo le plus souvent. Pour connaitre cette limite, créez un fichier info.php avec le code suivant :

Code PHP :
<?php
phpinfo();
?>

Envoyez ce fichier par FTP, ouvrez-le avec votre navigateur web, et cherchez la ligne : upload_max_filesize pour connaitre la taille maximum. Si votre sauvegarde MySQL est donc inférieure à cette limite, vous pouvez le faire.

Un conseil : si votre “dump” ou sauvegarde a été faite avec phpMyadmin, vous pouvez faire la restauration de la même manière, sinon, allez à la méthode par script PHP expliquée au point suivant.

Effacement de la base SQL :
Connectez-vous à votre interface phpMyadmin, entrez le nom de la base SQL et son mot de passe, puis en haut de la colonne de gauche, cliquez sur le nom de la base. Puis dans la fenêtre principale, en bas de la page, sous la colonne des cases à cocher, cliquez sur “Tout cocher” et dans le menu qui suit, choisissez “Supprimer la table”. Confirmer la suppression des “Tables” en cliquant sur “Oui”.

Restauration de la base :
On va importer la nouvelle base de données. Cliquez sur l'onglet “Importer”. Cliquez sur “Parcourir” pour sélectionner sur votre ordinateur la sauvegarde. ATTENTION : si la sauvegarde vient d'être faite avec phpMyadmin, c'est-à-dire en ayant suivi la procédure décrite ci-dessus, sélectionnez le jeu de caractères “utf8” (il y a de fortes chances que ce jeu de caractères soit le bon, sinon, prenez “latin1”). Si la sauvegarde a été réalisée autrement, choisissez le jeu de caractères correspondant. Sinon, les caractères accentués vont mal s'afficher sur le site web. Cliquez sur Exécuter. Et n'oubliez pas de vous déconnecter une fois terminé en cliquant sur l'icône Déconnecter.

b) Restauration par script PHP :

Si vous avez dépassé la limite parce que votre base SQL est trop grosse, un excellent script peut vous aider, il s'agit de BigDump dont vous pouvez télécharger la dernière version 0.36b ici. L'interface est en anglais. Il faut simplement entrer les paramètres de sa base SQL et choisir le bon jeu de caractères “utf8” ou “latin1”. Si vous avez utilisé le script de sauvegarde ci-dessus, vous savez quel jeu de caractères vous avez utilisé, alors qu'on est moins sûr avec phpMyadmin.

Effacement de la base SQL :
Connectez-vous à votre interface phpMyadmin, entrez le nom de la base SQL et son mot de passe, puis en haut de la colonne de gauche, cliquez sur le nom de la base. Puis dans la fenêtre principale, en bas de la page, sous la colonne des cases à cocher, cliquez sur “Tout cocher” et dans le menu qui suit, choisissez “Supprimer la table”. Confirmer la suppression des “Tables” en cliquant sur “Oui”. Et n'oubliez pas de vous déconnecter une fois terminé en cliquant sur l'icône Déconnecter.

Restauration de la base :
Par FTP, envoyez bigdump.php et votre sauvegarde SQL dans un même dossier. Avec votre navigateur web, ouvrez bigdump.php, il devrait lister votre base. Puis cliquez sur Start Import. Normalement, tout doit bien se passer et une fenêtre devrait vous dire que la base a été restaurée. Sinon, il vous faudra faire une sauvegarde table par table de votre base SQL pour réduire la taille des fichiers. Faites-le simplement avec phpMyadmin comme expliqué ci-dessus. Si cela n'est pas suffisant, consultez les forums, il existe de nombreuses astuces. Puis par FTP, effacez bigdump.php et la sauvegarde SQL. Ne conservez jamais bigdump, un pirate pourrait s'en servir très facilement pour contrôler votre site web.
Un conseil : vérifiez comment s'affichent les caractères accentués sur votre site web après restauration. À cause de certaines incohérences entre le latin1 et l'utf8, on peut avoir de mauvaises surprises. Par exemple : j'ai un blog où tout est en utf-8 (texte, charset html, interclassement SQL en utf-8, etc.), tout est cohérent depuis sa création. Si je fais un dump (sauvegarde) de la base en utf8 avec mon script, puis une restauration avec bigdump.php en utf8, le site web n'affiche pas bien les caractères accentués. J'ai dû faire un dump en latin1 puis restaurer avec bigdump.php en utf8 pour retrouver une situation normale. Pensez-y.

5- Récapitulatif. Vous avez sur votre ordinateur :

a) votre site web complet (fichiers HTML, images, et autres fichiers),
b) tous les fichiers à jour de votre blog, forum, cms, e-commerce avec les fichiers config, htaccess, les plugins, modules, thèmes, templates et vos modifications,
c) les dossiers uploads, logs, etc. que vous mettez régulièrement à jour,
d) une sauvegarde récente de votre base MySQL.

6- Si vous faites la restauration après un piratage

Modifiez vos mots de passe FTP et MySQL. Puis, n'oubliez pas de modifier les fichiers config.inc.php ou équivalents qui ont besoin de votre nouveau mot de passe SQL.

Tu seras un Homme…

Re-découvrez le célèbre poème de Rudyard Kipling “Si… tu seras un homme mon fils” qui a inspiré tant de générations. Il célèbre le courage de surmonter les épreuves.

J'ai décidé de réussir

J'ai réuni 10 conseils éprouvés pour trouver la volonté d'accomplir avec succès ses ambitions et franchir certains obstacles dans sa vie personnelle et professionnelle.

Gourmandises

Des recettes exquises de mignardises (madeleines, financiers, sablés, cakes, muffins) et autres gourmandises (croissants, brioche, gâteaux traditionnels…).