enycu
29/10/2007, 22h48
Sauvegarder son site web php et sa base SQL
(Partie 1)
Cet article et le suivant viennent du How-To sur Sécuriser et protéger son site web des attaques des pirates et hackers (http://forum.ovh.net/showthread.php?t=19263). J'ouvre un nouvel article afin que les personnes puissent le trouver facilement.
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, gallery, wiki, 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.
<?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 avec les droits 705 */
/* 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>";
?>
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: OVH a limité le temps d'exécution d'un script à 30 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 8 à 32 Mo, ce qui est insuffisant pour une sauvegarde de votre site web).
Pour connaître ces limites, créez un fichier info.php avec le code suivant:
<?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 connaître 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. OVH maintient 2 sauvegardes de votre base MySQL: la base de la veille (appelée -n) et une autre vieille d'une semaine environ (appelée -s).
a) Sauvegarde par phpMyadmin:
Pour faire une sauvegarde de votre base MySQL actuelle par phpMyadmin connectez-vous à votre interface:
http://pma.ovh.net/
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". Puis dans le champ Exporter qui liste toutes les tables, cliquez sur le lien "Tout sélectionner" et cochez le bouton en face de SQL. En bas de la page, cochez la case "Transmettre" et cochez la case "gzippé" pour compresser le fichier qui va être téléchargé, puis cliquez sur Exécuter. Et n'oubliez pas de vous déconnecter une fois finie en cliquant sur l'icône Exit.
Pour faire une sauvegarde de votre base MySQL vieille de 7 jours par phpMyadmin connectez-vous à votre interface avec ce lien:
http://90plan.ovh.net/phpMyadmin/index.php?db=NomDeLaBase-s&server=1&lang=fr-utf-8
Remplacez NomDeLaBase (en conservant le -s qui veut dire base vieille d'une semaine) par le nom de votre base SQL.
Remplacez 90plan par 60gp, start1g, etc., en fonction de votre offre d'hébergement.
Et faites la même chose que ci-dessus. Vous ne pourrez faire aucune modification de cette base, ni l'utiliser en production pour votre site web. Elle ne sert qu'à faire un "dump" (sauvegarde).
b) Sauvegarde par Script PHP.
L'avantage de la sauvegarde par script PHP est sa rapidité et la maîtrise 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.
<?php
/* Modifiez vos parametres MySQL */
$db_server = "ServeurMySQL";
$db_name = "NomDeLaBaseSQL"; /* pour acceder a la base vielle de 7 jours, ajoutez -s à la fin du nom, comme ceci: NomDeLaBaseSQL-s */
$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>";
?>
Après la sauvegarde, la restauration ...
(Partie 1)
Cet article et le suivant viennent du How-To sur Sécuriser et protéger son site web des attaques des pirates et hackers (http://forum.ovh.net/showthread.php?t=19263). J'ouvre un nouvel article afin que les personnes puissent le trouver facilement.
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, gallery, wiki, 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.
<?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 avec les droits 705 */
/* 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>";
?>
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: OVH a limité le temps d'exécution d'un script à 30 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 8 à 32 Mo, ce qui est insuffisant pour une sauvegarde de votre site web).
Pour connaître ces limites, créez un fichier info.php avec le code suivant:
<?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 connaître 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. OVH maintient 2 sauvegardes de votre base MySQL: la base de la veille (appelée -n) et une autre vieille d'une semaine environ (appelée -s).
a) Sauvegarde par phpMyadmin:
Pour faire une sauvegarde de votre base MySQL actuelle par phpMyadmin connectez-vous à votre interface:
http://pma.ovh.net/
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". Puis dans le champ Exporter qui liste toutes les tables, cliquez sur le lien "Tout sélectionner" et cochez le bouton en face de SQL. En bas de la page, cochez la case "Transmettre" et cochez la case "gzippé" pour compresser le fichier qui va être téléchargé, puis cliquez sur Exécuter. Et n'oubliez pas de vous déconnecter une fois finie en cliquant sur l'icône Exit.
Pour faire une sauvegarde de votre base MySQL vieille de 7 jours par phpMyadmin connectez-vous à votre interface avec ce lien:
http://90plan.ovh.net/phpMyadmin/index.php?db=NomDeLaBase-s&server=1&lang=fr-utf-8
Remplacez NomDeLaBase (en conservant le -s qui veut dire base vieille d'une semaine) par le nom de votre base SQL.
Remplacez 90plan par 60gp, start1g, etc., en fonction de votre offre d'hébergement.
Et faites la même chose que ci-dessus. Vous ne pourrez faire aucune modification de cette base, ni l'utiliser en production pour votre site web. Elle ne sert qu'à faire un "dump" (sauvegarde).
b) Sauvegarde par Script PHP.
L'avantage de la sauvegarde par script PHP est sa rapidité et la maîtrise 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.
<?php
/* Modifiez vos parametres MySQL */
$db_server = "ServeurMySQL";
$db_name = "NomDeLaBaseSQL"; /* pour acceder a la base vielle de 7 jours, ajoutez -s à la fin du nom, comme ceci: NomDeLaBaseSQL-s */
$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>";
?>
Après la sauvegarde, la restauration ...