Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
sauvegarder_un_site [Le 21/02/2009, 19:18] – topazz | sauvegarder_un_site [Le 21/10/2013, 15:31] (Version actuelle) – [Script PHP de création d'un fichier .sql.gz] 109.7.193.172 | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
+ | {{tag> | ||
+ | ---- | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ====== Sauvegarder un ou des sites internet via FTP et leurs bases de données MySQL ====== | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Principe ===== | ||
+ | |||
+ | 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. Pour récupérer les bases de données, il utilise soit mysqldump, soit http:// | ||
+ | |||
+ | 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' | ||
+ | |||
+ | Les sauvegardes MySQL créent un fichier date_heure.tar.bz2 ou date_heure.sql.gz pour les sites perso de free | ||
+ | |||
+ | ===== Prérequis ===== | ||
+ | |||
+ | |||
+ | Vérifiez que [[apt:// | ||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | |||
+ | ===== Installation ===== | ||
+ | |||
+ | |||
+ | Créez un fichier nom_que_l_on_veut.sh et mettez-y ce code : | ||
+ | |||
+ | < | ||
+ | #!/bin/bash | ||
+ | # 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 | ||
+ | |||
+ | # FONCTIONNALITÉS : | ||
+ | # - Sauvegarde des fichiers distants via FTP | ||
+ | # - Sauvegarde des bases de données MySQL distantes via mysqldump ou http:// | ||
+ | # - Sauvegarde de plusieurs sites | ||
+ | |||
+ | #Variables à renseigner | ||
+ | sav_complete_tous_les=" | ||
+ | rep_log=$HOME/ | ||
+ | |||
+ | #copiez collez le bloc en modifiant le numéro entre crochets, dans l' | ||
+ | |||
+ | # Début du bloc à paramétrer | ||
+ | nom_du_site[0]=login0.free.fr | ||
+ | script_http[0]= # adresse http d'un fichier (php par exemple) à appeler | ||
+ | rep_sav_ftp[0]=$HOME/ | ||
+ | rep_sav_sql[0]=$HOME/ | ||
+ | serveur_ftp[0]=ftpperso.free.fr | ||
+ | utilisateur_ftp[0]=login0 | ||
+ | mdp_ftp[0]=mdp0 | ||
+ | liste_rep_ftp[0]="/ | ||
+ | serveur_sql[0]=sql.free.fr | ||
+ | utilisateur_sql[0]=login0 | ||
+ | mdp_sql[0]=mdp0 # mot de passe mysql | ||
+ | liste_bases_de_donnees[0]="" | ||
+ | # Fin du bloc à paramétrer | ||
+ | |||
+ | # Début du bloc à paramétrer | ||
+ | nom_du_site[1]=mon_site.org | ||
+ | script_http[1]= | ||
+ | rep_sav_ftp[1]=$HOME/ | ||
+ | rep_sav_sql[1]= | ||
+ | serveur_ftp[1]=ftp.mon_site.org | ||
+ | utilisateur_ftp[1]=login1 | ||
+ | mdp_ftp[1]=mdp1 | ||
+ | liste_rep_ftp[1]="/" | ||
+ | serveur_sql[1]= | ||
+ | utilisateur_sql[1]= | ||
+ | mdp_sql[1]= | ||
+ | liste_bases_de_donnees[1]="" | ||
+ | # Fin du bloc à paramétrer | ||
+ | |||
+ | |||
+ | |||
+ | sauver(){ | ||
+ | # | ||
+ | if [ " | ||
+ | echo Exécution du script de ${nom_du_site[$i]} | ||
+ | links -dump ${script_http[$i]} | ||
+ | } fi | ||
+ | |||
+ | # | ||
+ | if [ " | ||
+ | echo | ||
+ | echo Sauvegarde FTP de ${nom_du_site[$i]} | ||
+ | echo | ||
+ | if [ ! -e " | ||
+ | mkdir -p " | ||
+ | } | ||
+ | else { | ||
+ | if [ " | ||
+ | mv " | ||
+ | mkdir -p " | ||
+ | } fi | ||
+ | } fi | ||
+ | for rep_ftp in ${liste_rep_ftp[$i]}; | ||
+ | lftp ftp:// | ||
+ | done | ||
+ | } fi | ||
+ | |||
+ | # | ||
+ | if [ " | ||
+ | echo | ||
+ | echo Sauvegarde SQL de ${nom_du_site[$i]} | ||
+ | echo | ||
+ | if [ ! -e " | ||
+ | mkdir -p " | ||
+ | } | ||
+ | else { | ||
+ | if [ " | ||
+ | mv " | ||
+ | mkdir -p " | ||
+ | } fi | ||
+ | } fi | ||
+ | cd ${rep_sav_sql[$i]} # on se place dans le repertoire ou l'on veut sauvegarder les bases | ||
+ | if [ " | ||
+ | wget http:// | ||
+ | } | ||
+ | else { | ||
+ | j=0 | ||
+ | for j in ${liste_bases_de_donnees[$i]}; | ||
+ | mysqldump -h${serveur_sql[$i]} -u${utilisateur_sql[$i]} -p${mdp_sql[$i]} $j > ${j}_`date +%D | sed ' | ||
+ | tar jcf ${j}_`date +%D | sed ' | ||
+ | rm ${j}_`date +%D | sed ' | ||
+ | done | ||
+ | } fi | ||
+ | } fi | ||
+ | |||
+ | } | ||
+ | |||
+ | date_debut_script=" | ||
+ | |||
+ | # On vérifie que lftp, links et mysql-client sont bien installés | ||
+ | if [ ! -e "/ | ||
+ | echo "lftp n'est pas installé. Ce script va l' | ||
+ | sudo apt-get install lftp | ||
+ | } fi | ||
+ | if [ ! -e "/ | ||
+ | echo "links n'est pas installé. Ce script va l' | ||
+ | sudo apt-get install links | ||
+ | } fi | ||
+ | if [ ! -e "/ | ||
+ | echo " | ||
+ | sudo apt-get install mysql-client* | ||
+ | } fi | ||
+ | |||
+ | |||
+ | # On attend d' | ||
+ | while ! ping google.com -A -c1 |grep "1 received" | ||
+ | echo en attente de connexion internet... | ||
+ | sleep 60 | ||
+ | done | ||
+ | |||
+ | |||
+ | # On met à jour les fichiers log | ||
+ | if [ ! -e " | ||
+ | mkdir -p $rep_log | ||
+ | echo $(date +%F_%H-%M-%S) > | ||
+ | } fi | ||
+ | if [ "$(cat $rep_log/ | ||
+ | | ||
+ | echo $(date +%F_%H-%M-%S) > | ||
+ | } fi | ||
+ | |||
+ | |||
+ | # On fait toutes les sauvegardes | ||
+ | len=${# | ||
+ | i=0 | ||
+ | while [ " | ||
+ | do | ||
+ | sauver | ||
+ | let "i = $i + 1" | ||
+ | done | ||
+ | |||
+ | echo La sauvegarde des sites internet a commencée $date_debut_script et s\'est terminée le $(date +%F) à $(date +%H:%M:%S) >> | ||
+ | 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 | ||
+ | </ | ||
+ | |||
+ | Puis rendez ce fichier exécutable | ||
+ | |||
+ | chmod +x nom_que_l_on_veut.sh | ||
+ | |||
+ | Il ne vous reste plus qu'à l' | ||
+ | |||
+ | |||
+ | ==== Script PHP de création d'un fichier .sql.gz ==== | ||
+ | |||
+ | Si le serveur mysql de votre site internet n'est pas accessible de l' | ||
+ | |||
+ | Vous pouvez créer un script php (ex : sauvegarder_mysql.php) qui aura pour fonction de sauver la BDD MySQL dans un fichier date_heure.sql.gz sur le serveur du site. | ||
+ | |||
+ | Ce script php sera exécuté lors de la sauvegarde en spécifiant son adresse dans la variable script_http[numéro] du script de sauvegarde (ci-dessus). | ||
+ | |||
+ | 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 pourrait ressembler à ça : | ||
+ | |||
+ | < | ||
+ | <?php | ||
+ | $mysql_server = ""; | ||
+ | $mysql_login = ""; | ||
+ | $mysql_passwd = ""; | ||
+ | $mysql_bdd = ""; | ||
+ | |||
+ | $date_actu = date(' | ||
+ | |||
+ | echo " | ||
+ | system(" | ||
+ | system(" | ||
+ | system(" | ||
+ | echo " | ||
+ | ?> | ||
+ | </ | ||
+ | |||
+ | ===== Automatisation ===== | ||
+ | |||
+ | 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, | ||
+ | |||
+ | |||
+ | === Avec Cron === | ||
+ | |||
+ | En tant que root (administrateur), | ||
+ | * / | ||
+ | * / | ||
+ | * / | ||
+ | * / | ||
+ | |||
+ | === Avec Fcron === | ||
+ | |||
+ | Si votre ordinateur n'est pas allumé en permanence, il vaut mieux utiliser [[fcron]], car cron ne s' | ||
+ | |||
+ | Installer fcront : [[apt:// | ||
+ | Puis configurez la sauvegarde : | ||
+ | | ||
+ | Ex : pour faire une sauvegarde 2 fois par semaine : | ||
+ | | ||
+ | Faire CTRL + O pour enregistrer puis CTRL + X pour quitter |