Salut,
J’ai fait (disons plutôt que j’ai compilé des morceaux de scripts, piqués à droite et à gauche) un petit script destiné à sauvegarder les fichiers importants de mon serveur dédié (Squeeze + IspConfig3)
Je vous le propose ici (et non pas dans le fil: pour les scripts c’est ici) afin de l’améliorer si vous y voyez des aberrations…
Le script (lancé par une tâche cron) sauvegarde journalièrement les sites Webs, les bases sql, les emails, l’intégralité du dossier /etc et les fichiers de configuration de IspConfig3 - Basesql et dossier)
Puis ces fichiers sont envoyés sur le FTP de OVH (Ce ftp “interne” n’est accessible que depuis le dédié, c’est donc assez sécurisé)
Deux jours de sauvegarde sur le serveur, idem sur le ftp.
[code]#!/bin/bash
Sauvegarde quotidienne: Sites, Bases Mysql, Emails, fichiers de configuration.
###################################################################### Variables
HOST=“localhost”
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Chemins
CHEMIN="/usr/local/scripts/“
DEST=”/var/backup/“
DESTSITE=”/var/backup/sites/“
DESTSQL=”/var/backup/mysql/“
DESTISP=”/var/backup/isp/"
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Connexion sql et root
DB="dbispconfig"
USER="root"
PASS=‘motdepasseroot’
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Dates
DATE="$(date +%F)“
DATE2=”$(date -d ‘2 days ago’ +%F)"
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Chemins exécutables
MYSQL="$(which mysql)“
MYSQLDUMP=”$(which mysqldump)“
CHOWN=”$(which chown)“
CHMOD=”$(which chmod)“
GZIP=”$(which gzip)"
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Divers Mysql
DBS="" # liste des bases
NODB=“information_schema” # databases à ne pas sauvegarder
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> FTP
FTP_HOST="nomdevotreftp"
FTP_USER="utilisateur"
FTP_PASS=“motdepasseftp”
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Divers
TEMP="brut"
MAIL=“admin@mondomaine.tld” # destinataire du mail contenant les logs
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>> Logs
LOGS="/var/backup/logs" # Répertoire pour les logs des backups
[ ! -d $LOGS ] && mkdir -p $LOGS # Préparation du répertoire pour les logs
LOGNAME=${DATE}"-backuplog.txt"
LOGNAME2=${DATE2}"-backuplog.txt"
LOGFILE=${LOGS}"/"${LOGNAME}
LOGFILE2=${LOGS}"/"${LOGNAME2}
function log_msg () {
echo “$(date +%X): $@” >> “$LOGFILE”
}
log_msg "************************************************************"
log_msg "date +%X
: Début de la sauvegarde"
log_msg “************************************************************”[/code]
[code]###################################################################### BACKUP SITES
[ ! -d $DESTSITES ] && mkdir -p $DESTSITES
Récupération infos clients et sites
cd "$CHEMIN"
echo “select system_user,system_group from web_domain” | mysql -u $USER -p$PASS -D $DB > $TEMP
tail -n +2 “$TEMP” > liste
rm “$CHEMIN/$TEMP”
Début boucle liste
while read ligne
do
set $(echo $ligne)
# Variables boucle
SITE=$(eval echo $1)
CLIENT=$(eval echo $2)
# Sauvegarde Sites
cd /var/backup/sites/
tar zcfP "$SITE"-"$DATE".tar.gz /var/www/clients/"$CLIENT/$SITE"
# Effacer les sauvegardes de plus de 2 jours
TARGZOLD="$DESTSITES$SITE-$DATE2".tar.gz
[ -f $TARGZOLD ] && rm -f $TARGZOLD || :
log_msg "`date +%X`: $CLIENT Site $SITE sauvegarde terminée"
done < liste
rm “$CHEMIN/liste”[/code]
[code]###################################################################### BACKUP SQL
[ ! -d $DESTSQL ] && mkdir -p $DESTSQL
Seul Root accède aux backups!
$CHOWN 0.0 -R $DEST
$CHMOD 0600 $DEST
OLDOFS=$OFS
OLDIFS=$IFS
DBS=( $($MYSQL -u $USER -h $HOST -p$PASS -Bse ‘show databases’) )
OFS=$OLDOFS
IFS=$OLFIFS
for db in "${DBS[@]}"
do
skipdb=-1
if [ “$NODB” != “” ];
then
for i in $NODB
do
[ “$db” == “$i” ] && skipdb=1 || :
done
fi
if [ "$skipdb" == "-1" ] ; then
SQLGZ="$DESTSQL$db.$DATE.gz"
$MYSQLDUMP -u $USER -h $HOST -p$PASS $db | $GZIP -9 > $SQLGZ
log_msg "`date +%X`: $SQLGZ sauvegarde terminée"
# Effacer les sauvegardes de 2 jours
SQLGZOLD="$db.$DATE2.gz"
if test -f "$DESTSQL$SQLGZOLD"; then
echo 'suppression des backups 2 jours'
rm -f "$DESTSQL$SQLGZOLD"
fi
fi
done[/code]
[code]###################################################################### BACKUP /etc /var/vmail IscpConfig
[ ! -d $DESTISP ] && mkdir -p $DESTISP
cd $DESTISP
tar -pczf etc-$DATE.tar.gz /etc
log_msg “date +%X
: etc-$DATE.tar.gz sauvegarde terminée”
rm etc-$DATE2.tar.gz
service postfix stop
tar -pczf vmail-$DATE.tar.gz /var/vmail
service postfix start
log_msg "date +%X
: vmail-$DATE.tar.gz sauvegarde terminée"
rm vmail-$DATE2.tar.gz /var/vmail
mysqldump -u root -p"$PASS" dbispconfig > “$DESTISP”/dbispconfig-$DATE.sql; gzip -f “$DESTISP”/dbispconfig-$DATE.sql
log_msg "date +%X
: dbispconfig-$DATE.sql.gz sauvegarde terminée"
rm dbispconfig-$DATE2.sql.gz
tar -pczf ispconfig_software-$DATE.tar.gz /usr/local/ispconfig
log_msg "date +%X
: ispconfig_software-$DATE.tar.gz sauvegarde terminée"
rm ispconfig_software-$DATE2.tar.gz[/code]
[code]###################################################################### ENVOI SUR FTP OVH
log_msg "*********************************************************“
log_msg "date +%X
Début des transferts FTP”
################################################################ Préparation FTP (jour vers jour-1)
ftp -in <> $LOGFILE
open ${FTP_HOST}
user ${FTP_USER} ${FTP_PASS}
bin
verbose
mdelete jour-1/isp/
mdelete jour-1/mysql/
mdelete jour-1/sites/
rmdir jour-1/isp
rmdir jour-1/mysql
rmdir jour-1/sites
rmdir jour-1
rename /jour /jour-1
mkdir /jour
mkdir /jour/isp
mkdir /jour/mysql
mkdir /jour/sites
bye
EOF
################################################################ Envoi bases sql sur ftp
cd $DESTSQL
shopt -s nullglob
FICHIERS=( *${DATE}.gz )
(( ${#FICHIERS[@]} > 0 )) && ftp -in <> $LOGFILE
open ${FTP_HOST}
user ${FTP_USER} ${FTP_PASS}
bin
verbose
cd /jour/mysql
$(printf “put %s\n” “${FICHIERS[@]}”)
bye
EOF
################################################################ Envoi sites sur ftp
cd $DESTSITE
shopt -s nullglob
FICHIERS=( *${DATE}.tar.gz )
(( ${#FICHIERS[@]} > 0 )) && ftp -in <> $LOGFILE
open ${FTP_HOST}
user ${FTP_USER} ${FTP_PASS}
bin
verbose
cd /jour/sites
$(printf “put %s\n” “${FICHIERS[@]}”)
bye
EOF
################################################################## Envoi /etc /var/vmail dbispconfig et ispconfig sur ftp
cd $DESTISP
shopt -s nullglob
FICHIERS=( *${DATE}.tar.gz )
(( ${#FICHIERS[@]} > 0 )) && ftp -in <> $LOGFILE
open ${FTP_HOST}
user ${FTP_USER} ${FTP_PASS}
bin
verbose
cd /jour/isp
$(printf “put %s\n” “${FICHIERS[@]}”)
bye
EOF
cd $DESTISP
shopt -s nullglob
FICHIERS=( *${DATE}.sql.gz )
(( ${#FICHIERS[@]} > 0 )) && ftp -in <> $LOGFILE
open ${FTP_HOST}
user ${FTP_USER} ${FTP_PASS}
bin
verbose
cd /jour/isp
$(printf “put %s\n” “${FICHIERS[@]}”)
bye
EOF
################################################################## Fin de la sauvegarde!
log_msg "************************************************************"
log_msg "date +%X
Fin du script de sauvegarde "
cat $LOGFILE | mail -s “Résultat Sauvegarde du $DATE” $MAIL -r root
rm $LOGFILE2 # Nettoyage des logs
exit[/code]
Merci pour vos commentaires et idées pour améliorer.