Script de sauvegarde locale, incrémentale par rsync avec un dossier pour chaque jour avec une sauvegarde par jour :
#!/bin/bash
annee=`date "+%Y"`
mois=`date "+%m"`
date=`date "+%d_%Hh%M"`
ORIG=/var/mail/
BACKUP=/var/data/backup/mail
if [ ! -d $BACKUP/$annee ]
then
echo "Création du dossier $annee"
mkdir $BACKUP/$annee
fi
if [ ! -d $BACKUP/$annee/$mois ]
then
echo "Création du dossier $annee/$mois "
mkdir $BACKUP/$annee/$mois
fi
rsync -aP --link-dest=$BACKUP/current $ORIG $BACKUP/$annee/$mois/incomplete_back-$date \
&& mv $BACKUP/$annee/$mois/incomplete_back-$date $BACKUP/$annee/$mois/$date \
&& rm -rf $BACKUP/current \
&& ln -s $BACKUP/$annee/$mois/$date $BACKUP/current
Tâche cron pour le lancer en root :
crontab -e
35 3 * * * /root/scripts/rsync-mail-local.sh 1> /dev/null
Script pour sauvegarder à distance par rsync :
#!/bin/bash
ORIG=/var/mail/
BACKUP="/var/data/sauv/mail"
PORT=22
HOTE=user@serveur
rsync -avz --delete-after --rsync-path=/usr/bin/rsync -e "ssh -p $PORT" $ORIG $HOTE:$BACKUP
Tâche cron pour le lancer en root :
crontab -e
35 3 * * * /root/scripts/rsync-mail-distance.sh 1> /dev/null
Ce script permet de vérifier la présence des dossiers ou des fichiers de sauvegarde. À lancer en fin de journée après les sauvegardes et à faire envoyer par mail si erreur.
#!/bin/bash
annee=`date "+%Y"`
an=`date "+%y"`
mois=`date "+%m"`
date=`date "+%d_%Hh%M"`
jour=`date "+%d"`
# Emplacement du dossier de sauvegarde
BACKUP=/var/data/backup
errs=0
######## Louis ############"
echo -e "\tServeur monbeauserveur.net"
if [ -d $BACKUP/sites/$annee/$mois/$jour* ]; then
echo -e "Sauvegarde des sites\t\t[OK]"
else
echo -e "Sauvegarde des sites\t\t[ERREUR]"
errs=1
fi
if [ -d $BACKUP/mail/$annee/$mois/$jour* ]; then
echo -e "Sauvegarde des mails\t\t[OK]"
else
echo -e "Sauvegarde des mails\t\t[ERREUR]"
errs=1
fi
if [ -f $BACKUP/mysql/mysql_$jour*$mois*$an.sql.gz ]; then
echo -e "Sauvegarde mariadb\t\t[OK]"
else
echo -e "Sauvegarde mariadb\t\t[ERREUR]"
errs=1
fi
if [ $errs = 1 ]; then
exit 1
else
exit 0
fi
Script qui permet de faire un dump de toutes les BDD mysql et de ne garder que quelques jours de sauvegardes
#!/bin/bash
## Paramètres
USER='dbbackup'
PASS='mot de passe'
# Nombre de sauvegardes à garder
RETENTION=5
# date du jour
DATE=`date +%d_%m_%y`
# Exclure des bases
# EXCLUSIONS='(information_schema|performance_schema)'
EXCLUSIONS='(information_schema)'
# Répertoire de stockage des sauvegardes
DATADIR="/var/data/backup/mysql/"
# On place dans un tableau le nom de toutes les bases de données du serveur
databases="$(mysql -u $USER -p$PASS -Bse 'show databases' | grep -v -E $EXCLUSIONS)"
# on boucle sur chaque base
for SQL in $databases
do
mysqldump -u $USER -p$PASS --quick --add-locks --lock-tables --extended-insert $SQL --skip-lock-tables | gzip > ${DATADIR}/$SQL"_"$DATE.sql.gz
done
find ${DATADIR} -name "*.gz" -mtime +${RETENTION} -print -exec rm {} \;`
Tâche cron pour le lancer en root :
crontab -e
01 16 * * * /root/scripts/dumpsql.sh >/dev/null 2>&1
Petit mémo pour me souvenir comment je sauvegarde mon serveur. Ça peut vous servir ! Thomas si tu me lis, fait la même chose !