Sauvegarde de sites et de bases de données
Ce script de sauvegarde a été developpé pour un Centos 7, Parallel Plesk 12.5.30 sur plus de 30 espaces web.
Il n'inclut pas la sauvegarde des mails (postfix, roundcube, horde).
Etape 1 : création du script de compactage - espaces web - bases
Adapter le script suivant pour votre serveur
Ce script permet de sauvegarder sur 30 jours flottants.
fichier :
scriptDeSauvegarde.sh
# backup : mysqldump -u root -p[root_password] [database_name] > dumpfilename.sql
# restore : mysql -u root -p[root_password] [database_name] < dumpfilename.sql
# on ne prend que le %d de la date : le jour pour tous les jours du mois glissant.
sauvegarde=$(date +%d)
echo sauvegarde du $sauvegarde - Serveur 4
dir=/var/www/vhosts/dossier_tempo
cd $dir
rm -f *.gz
rm -f *.sql
# quand on l'exécute par crontab, s'assurer qu'on est dans le bon répertoire.
# sauvegarde des bases
# l'utilisateur a été modifié pour avoir les privilèges nécessaires
# connexion à phpmyadmin avec user root, puis onglet privilèges,
# la connexion à phpmyadmin peut se faire à partire de Plesk
# Identifiants MySQL
MYSQL_USER="utilisateurAvecPrivilèges"
MYSQL_PASSWORD="motDePasseDelUtilisateurAvecPrivilèges"
# Commandes MySQL (aucune raison de modifier ceci)
MYSQL=/usr/bin/mysql
MYSQLDUMP=/usr/bin/mysqldump
# Bases de données MySQL à ignorer
SKIPDATABASES="Database|information_schema|performance_schema|mysql"
# ---- NE RIEN MODIFIER SOUS CETTE LIGNE ------------------------------------------
# Création par date d'un nouveau dossier (facultatif), dans ce cas
# mkdir -p $dir/$DATE
# Retrieve a list of all databases
databases=`$MYSQL -u$MYSQL_USER -p$MYSQL_PASSWORD -e "SHOW DATABASES;" | grep -Ev "($SKIPDATABASES)"`
# Dumb the databases in seperate names and gzip the .sql file
for db in $databases; do
echo $db
$MYSQLDUMP --force --opt --user=$MYSQL_USER -p$MYSQL_PASSWORD --skip-lock-tables --events --databases $db > "$dir/$db.sql"
done
tar cfvz $dir/backup_bases_OVH-1a1_$sauvegarde.tar.gz $dir/*.sql
# Sauvegardes des hosts
# dans ce cas la liste des hosts se trouve dans un dossier de configuration, c'est pourquoi le script va supprimer '.conf' du nom
ls /etc/httpd/conf/plesk.conf.d/vhosts > lhosts
while read lhosts; do
if [ $lhosts = "nomDeDomaineàNePasSauvegarder.conf" ];
then
echo $lhosts ... skip
else
unHost=${lhosts//.conf/}
echo $unHost ... tar
tar czf $dir/backup_OVH-1a1_$unHost.$sauvegarde.tar.gz /var/www/vhosts/$unHost/httpdocs
fi
done < lhosts
ls -l
sh copieVersAutreServeur.sh
Etape 2 : copie des fichiers compactés vers un autre serveur
Cetaines offres incluent un serveur de 100go pour les sauvegardes. Par exemple SoYouStart d'OVH, met à disposition un serveur Backup Storage.
L'étape suivante sera de créer le script copierVersAutreServeur.sh qui se connectera au serveur de backups et copiera l'ensemble des fichiers compactés (*.gz) grâce à lftp.
Il faut bien sûr que lftp soit installé sur votre serveur.
fichier :
copieVersAutreServeur.sh
cd $dir
lftp -u userServeurBackup,motDePasseServeurBackup nomDuServeurDeBackup <commands
Etape 3 : Créer le fichier de commandes lftp
fichier :
commands
set ssl:verify-certificate no
mput *.gz
Etape 4 : ajouter deux tâches planifiées de type CRON
Une tâche cron est une tâche planifiée qu'on peut ajouter dans les panneaux d'administration des sites web, par exemple de ispconfig, cpanel, plesk.
Cette tâche s'exécutera à la fréquence demandée (par exemple tous les jours à minuit dans le cas des backups de base de données et d'espace web).
Bien sûr avant de planifier une nouvelle tâche cron, vous devez tester vos deux scripts scriptDeSauvegarde.sh et copieVersAutreServeur.sh.
NB : copieVersAutreServeur.sh peut être inclus dans scriptDeSauvegarde.sh.
ScriptDeSauvegarde.sh doit s'exécuter et terminer avant copieVersAutreServeur.sh
Hope it is helpful, enjoy it !