Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentes Révision précédente Prochaine révision | Révision précédente | ||
sauvegarder_un_site [Le 29/09/2008, 09:30] topazz |
sauvegarder_un_site [Le 11/09/2022, 11:38] (Version actuelle) moths-art Suppression des espaces en fin de ligne (détecté et corrigé via le bot wiki-corrector (https://forum.ubuntu-fr.org/viewtopic.php?id=2067892) |
||
---|---|---|---|
Ligne 9: | Ligne 9: | ||
====== Sauvegarder un ou des sites internet via FTP et leurs bases de données MySQL ====== | ====== Sauvegarder un ou des sites internet via FTP et leurs bases de données MySQL ====== | ||
+ | |||
+ | |||
+ | |||
Ligne 16: | Ligne 19: | ||
Ce script va vous permettre de sauvegarder un ou plusieurs sites internet sur votre disque dur local, ainsi que la(les) base(s) de données MySQL associées. | Ce script va vous permettre de sauvegarder un ou plusieurs sites internet sur votre disque dur local, ainsi que la(les) base(s) de données MySQL associées. | ||
- | Il utilise lftp pour récupérer les fichiers, et mysqldump ou http://sql.free.fr/backup.php pour les sites perso de free pour récupérer les bases de données | + | Il utilise lftp pour récupérer les fichiers. Pour récupérer les bases de données, il utilise soit mysqldump, soit http://sql.free.fr/backup.php pour les sites perso de free, soit wget qui va récupérer sur le site un fichier contenant la BDD (cf paragraphe "Script PHP de création d'un fichier .sql.gz") |
- | Les sauvegardes ftp vont écraser les fichiers modifier, ajouter les nouveaux fichiers et supprimer les fichiers qui ne sont pas sur le serveur. | + | Les sauvegardes ftp vont écraser les fichiers modifiés, ajouter les nouveaux fichiers et supprimer les fichiers qui ne sont pas sur le serveur. |
+ | Tous les x jours/mois, l'ancienne sauvegarde sera archivée, et une nouvelle se fera. | ||
Les sauvegardes MySQL créent un fichier date_heure.tar.bz2 ou date_heure.sql.gz pour les sites perso de free | Les sauvegardes MySQL créent un fichier date_heure.tar.bz2 ou date_heure.sql.gz pour les sites perso de free | ||
Ligne 26: | Ligne 30: | ||
Vérifiez que [[apt://lftp|lftp]], [[apt://links|links]] et [[apt://mysql-server|mysql-server]] sont bien installés. | Vérifiez que [[apt://lftp|lftp]], [[apt://links|links]] et [[apt://mysql-server|mysql-server]] sont bien installés. | ||
+ | |||
+ | |||
+ | |||
Ligne 38: | Ligne 45: | ||
<file> | <file> | ||
#!/bin/bash | #!/bin/bash | ||
- | # Version 0.2 | + | # Version 0.31 : ajout de la possibilité de sauver une liste de répertoires en ftp pour chaque site internet + installation automatique des logiciels manquant |
- | # ATTENTION : lftp, links et mysql-server doivent être installés | + | # FONCTIONNALITÉS : |
- | + | ||
- | # FONCTIONNALITÉS : | + | |
# - Sauvegarde des fichiers distants via FTP | # - Sauvegarde des fichiers distants via FTP | ||
# - Sauvegarde des bases de données MySQL distantes via mysqldump ou http://sql.free.fr/backup.php pour les sites perso de free | # - Sauvegarde des bases de données MySQL distantes via mysqldump ou http://sql.free.fr/backup.php pour les sites perso de free | ||
# - Sauvegarde de plusieurs sites | # - Sauvegarde de plusieurs sites | ||
- | |||
#Variables à renseigner | #Variables à renseigner | ||
- | sav_complete_tous_les="2 month" # refaire une sauvegarde complete et archiver les anciennes tous les ... (ex1 : 2 month) (ex2 : 30 day) (ex3: 12 hour) | + | sav_complete_tous_les="1 month" # refaire une sauvegarde complete et archiver les anciennes tous les ... (ex1 : 2 month) (ex2 : 30 day) (ex3: 12 hour) |
rep_log=$HOME/Sauvegardes/internet # répertoire où les fichiers .log seront stockés | rep_log=$HOME/Sauvegardes/internet # répertoire où les fichiers .log seront stockés | ||
Ligne 57: | Ligne 61: | ||
nom_du_site[0]=login0.free.fr # Nom du site internet (juste pour info) | nom_du_site[0]=login0.free.fr # Nom du site internet (juste pour info) | ||
script_http[0]= # adresse http d'un fichier (php par exemple) à appeler | script_http[0]= # adresse http d'un fichier (php par exemple) à appeler | ||
- | rep_sav_ftp[0]=$HOME/Sauvegardes/ftp/login0 # Répertoire où seront sauvés les fichiers récupérés du site par ftp. Laissez vide si vous ne voulez pas de sauvegarde ftp | + | rep_sav_ftp[0]=$HOME/Sauvegardes/ftp/login0 # Répertoire où seront sauvés les fichiers récupérés du site par ftp. Laissez vide si vous ne voulez pas de sauvegarde ftp. Ne pas terminer l'adresse par / |
rep_sav_sql[0]=$HOME/Sauvegardes/sql/login0 # Répertoire où seront sauvés les bases de données du site. Laissez vide si vous ne voulez pas de sauvegarde sql | rep_sav_sql[0]=$HOME/Sauvegardes/sql/login0 # Répertoire où seront sauvés les bases de données du site. Laissez vide si vous ne voulez pas de sauvegarde sql | ||
serveur_ftp[0]=ftpperso.free.fr # adresse du serveur ftp | serveur_ftp[0]=ftpperso.free.fr # adresse du serveur ftp | ||
utilisateur_ftp[0]=login0 # utilisateur ftp | utilisateur_ftp[0]=login0 # utilisateur ftp | ||
mdp_ftp[0]=mdp0 # mot de passe ftp | mdp_ftp[0]=mdp0 # mot de passe ftp | ||
- | rep_ftp[0]=/rep # répertoire sur le serveur ftp à sauvegarder. Mettre simplement / pour sauver le site en entier | + | liste_rep_ftp[0]="/rep /rep2/sous_rep" # liste de répertoires sur le serveur ftp à sauvegarder, séparés par des espaces. Mettre simplement / pour sauver le site en entier. Dans tous les cas l'adresse doit commencer par /. Garder les guillemets |
serveur_sql[0]=sql.free.fr # adresse du serveur mysql | serveur_sql[0]=sql.free.fr # adresse du serveur mysql | ||
utilisateur_sql[0]=login0 # utilisateur mysql | utilisateur_sql[0]=login0 # utilisateur mysql | ||
mdp_sql[0]=mdp0 # mot de passe mysql | mdp_sql[0]=mdp0 # mot de passe mysql | ||
- | liste_bases_de_donnees[0]= # liste des bases de données à sauver, séparées par des espaces (inutile pour les sites perso de free). Ex : mon_forum mon_blog | + | liste_bases_de_donnees[0]="" # liste des bases de données à sauver, séparées par des espaces (inutile pour les sites perso chez free). Ex : mon_forum mon_blog. Garder les guillemets |
# Fin du bloc à paramétrer | # Fin du bloc à paramétrer | ||
# Début du bloc à paramétrer | # Début du bloc à paramétrer | ||
- | nom_du_site[1]=mon_site.org # Nom du site internet (juste pour info) | + | nom_du_site[1]=mon_site.org |
- | script_http[1]= # adresse http d'un fichier (php par exemple) à appeler | + | script_http[1]= |
- | rep_sav_ftp[1]=$HOME/Sauvegardes/ftp/mon_site_org # Répertoire où seront sauvés les fichiers récupérés du site par ftp. Laissez vide si vous ne voulez pas de sauvegarde ftp | + | rep_sav_ftp[1]=$HOME/Sauvegardes/ftp/mon_site_org |
- | rep_sav_sql[1]= # Répertoire où seront sauvés les bases de données du site. Laissez vide si vous ne voulez pas de sauvegarde sql | + | rep_sav_sql[1]= |
- | serveur_ftp[1]=ftp.mon_site.org # adresse du serveur ftp | + | serveur_ftp[1]=ftp.mon_site.org |
- | utilisateur_ftp[1]=login1 # utilisateur ftp | + | utilisateur_ftp[1]=login1 |
- | mdp_ftp[1]=mdp1 # mot de passe ftp | + | mdp_ftp[1]=mdp1 |
- | rep_ftp[1]=/ # répertoire sur le serveur ftp à sauvegarder. Mettre simplement / pour sauver le site en entier | + | liste_rep_ftp[1]="/" |
- | serveur_sql[1]= # adresse du serveur mysql | + | serveur_sql[1]= |
- | utilisateur_sql[1]= # utilisateur mysql | + | utilisateur_sql[1]= |
- | mdp_sql[1]= # mot de passe mysql | + | mdp_sql[1]= |
- | liste_bases_de_donnees[1]= # liste des bases de données à sauver, séparées par des espaces (inutile pour les sites perso de free). Ex : mon_forum mon_blog | + | liste_bases_de_donnees[1]="" |
# Fin du bloc à paramétrer | # Fin du bloc à paramétrer | ||
Ligne 89: | Ligne 93: | ||
#Exécute un script via http (ex : un fichier php sur le site internet distant qui va fabriquer un fichier .sql contenant la sauvegarde des BDD) | #Exécute un script via http (ex : un fichier php sur le site internet distant qui va fabriquer un fichier .sql contenant la sauvegarde des BDD) | ||
if [ "${script_http[$i]}" != "" ]; then { | if [ "${script_http[$i]}" != "" ]; then { | ||
+ | echo Exécution du script de ${nom_du_site[$i]} | ||
links -dump ${script_http[$i]} | links -dump ${script_http[$i]} | ||
} fi | } fi | ||
Ligne 106: | Ligne 111: | ||
} fi | } fi | ||
} fi | } fi | ||
- | lftp ftp://${utilisateur_ftp[$i]}:${mdp_ftp[$i]}@${serveur_ftp[$i]} -e "mirror -e ${rep_ftp[$i]} ${rep_sav_ftp[$i]} ; quit" | + | for rep_ftp in ${liste_rep_ftp[$i]}; do |
+ | lftp ftp://${utilisateur_ftp[$i]}:${mdp_ftp[$i]}@${serveur_ftp[$i]} -e "mirror -e ${rep_ftp} ${rep_sav_ftp[$i]}${rep_ftp} ; quit" | ||
+ | done | ||
} fi | } fi | ||
Ligne 139: | Ligne 146: | ||
} | } | ||
+ | date_debut_script="le $(date +%F) à $(date +%H:%M:%S)" | ||
+ | |||
+ | # On vérifie que lftp, links et mysql-client sont bien installés | ||
+ | if [ ! -e "/usr/bin/lftp" ]; then { | ||
+ | echo "lftp n'est pas installé. Ce script va l'installer automatiquement." | ||
+ | sudo apt-get install lftp | ||
+ | } fi | ||
+ | if [ ! -e "/usr/bin/links" ]; then { | ||
+ | echo "links n'est pas installé. Ce script va l'installer automatiquement." | ||
+ | sudo apt-get install links | ||
+ | } fi | ||
+ | if [ ! -e "/usr/bin/mysqldump" ]; then { | ||
+ | echo "mysqldump n'est pas installé. Ce script va l'installer automatiquement." | ||
+ | sudo apt-get install mysql-client* | ||
+ | } fi | ||
+ | |||
+ | |||
+ | # On attend d'être connecté à internet | ||
+ | while ! ping google.com -A -c1 |grep "1 received" >/dev/null; do | ||
+ | echo en attente de connexion internet... | ||
+ | sleep 60 | ||
+ | done | ||
+ | |||
+ | |||
+ | # On met à jour les fichiers log | ||
if [ ! -e "$rep_log/date_derniere_version_sauvegarde.log" ]; then { # Si c'est une première sauvegarde | if [ ! -e "$rep_log/date_derniere_version_sauvegarde.log" ]; then { # Si c'est une première sauvegarde | ||
mkdir -p $rep_log | mkdir -p $rep_log | ||
Ligne 149: | Ligne 181: | ||
+ | # On fait toutes les sauvegardes | ||
len=${#nom_du_site[*]} | len=${#nom_du_site[*]} | ||
i=0 | i=0 | ||
Ligne 157: | Ligne 190: | ||
done | done | ||
- | echo La sauvegarde des sites internet s\'est terminée le $(date +%F) à $(date +%H:%M:%S) >>$rep_log/liste_sauvegardes.log | + | echo La sauvegarde des sites internet a commencée $date_debut_script et s\'est terminée le $(date +%F) à $(date +%H:%M:%S) >>$rep_log/liste_sauvegardes.log |
+ | echo La sauvegarde des sites internet a commencée $date_debut_script et s\'est terminée le $(date +%F) à $(date +%H:%M:%S) | ||
exit 0 | exit 0 | ||
Ligne 180: | Ligne 213: | ||
Puis, le fichier date_heure.sql.gz sera rappatrié en local dans votre répertoire de sauvegarde avec la sauvegarde des fichiers via lftp. | Puis, le fichier date_heure.sql.gz sera rappatrié en local dans votre répertoire de sauvegarde avec la sauvegarde des fichiers via lftp. | ||
- | Par ex, sauvegarder_mysql.php pourrai ressembler à ça : | + | Par ex, sauvegarder_mysql.php pourrait ressembler à ça : |
<file> | <file> | ||
<?php | <?php | ||
+ | $mysql_server = ""; | ||
+ | $mysql_login = ""; | ||
+ | $mysql_passwd = ""; | ||
+ | $mysql_bdd = ""; | ||
+ | |||
$date_actu = date('Y-m-d_H-i-s'); | $date_actu = date('Y-m-d_H-i-s'); | ||
- | echo "Sauvegarde Mysql en cours...<BR>"; | + | |
- | require ($_SERVER["DOCUMENT_ROOT"]."/config/config.inc.php"); | + | echo "Sauvegarde MySQL en cours...<BR>"; |
system("mysqldump --host=".$mysql_server." --user=".$mysql_login." --password=".$mysql_passwd." ".$mysql_bdd." > ./mysql/".$date_actu.".sql"); | system("mysqldump --host=".$mysql_server." --user=".$mysql_login." --password=".$mysql_passwd." ".$mysql_bdd." > ./mysql/".$date_actu.".sql"); | ||
system("gzip ./mysql/".$date_actu.".sql"); | system("gzip ./mysql/".$date_actu.".sql"); | ||
system("rm ./mysql/".$date_actu.".sql"); | system("rm ./mysql/".$date_actu.".sql"); | ||
- | echo "Sauvegarde Mysql terminee"; | + | echo "Sauvegarde MySQL terminee"; |
?> | ?> | ||
</file> | </file> | ||
Ligne 198: | Ligne 236: | ||
Faites appeler ce script automatiquement à intervalle régulière par [[cron]] ou [[fcron]] | Faites appeler ce script automatiquement à intervalle régulière par [[cron]] ou [[fcron]] | ||
+ | Vérifiez de temps en temps que le log de sauvegarde. Si celle ci ne s'est pas faite, tentez la manuellement, car il se peut que vous ayez rentré un login ou un mot de passe incorrect et que ça bloque. | ||
+ | |||
+ | |||
+ | === Avec Cron === | ||
+ | |||
+ | En tant que root (administrateur), copiez le fichier sauver_sites_internet.sh créé vers un de ces répertoire, en fonction de la fréquence de sauvegarde désirée : | ||
+ | * /etc/cron.hourly | ||
+ | * /etc/cron.daily | ||
+ | * /etc/cron.weekly/ | ||
+ | * /etc/cron.monthly | ||
+ | |||
+ | === Avec Fcron === | ||
+ | |||
+ | Si votre ordinateur n'est pas allumé en permanence, il vaut mieux utiliser [[fcron]], car cron ne s'exécute qu'à une heure précise de la journée alors que fcron prend en compte le temps pendant lequel reste allumé la machine : | ||
+ | |||
+ | Installer fcront : [[apt://fcron]]. | ||
+ | Puis configurez la sauvegarde : | ||
+ | fcrontab -e | ||
+ | Ex : pour faire une sauvegarde 2 fois par semaine : | ||
+ | %midweekly * 0-23 ~/Sauvegardes/sauver_sites_internet.sh | ||
+ | Faire CTRL + O pour enregistrer puis CTRL + X pour quitter |