L'administrateur d'un serveur SQL veut pouvoir automatiser la sauvegarde/restauration d'une base SQL.
Pour se faire, il veut que :
- en écrivant './script.sh dump' le script sauvegarde la base SQL en local (sur le serveur SQL lui-même).
- en écrivant './script.sh restore' le script permette de restaurer la base sauvegardée, en offrant le choix du fichier de sauvegarde à récupérer (en fonction de sa date).
- le nom des fichiers de sauvegarde comporte la date et l'heure auxquelles ils sont sauvegardés.
- le nombre de sauvegardes stockées n'excède pas 5 (on ne garde que les 5 dernières sauvegardes).
Complétez les variables du script avec vos informations !
#!/bin/bash
# Variable paramètres (nombre de backups à conserver)
RETENTION=5
# Informations base de donnée
dbName='glpi'
dbUser='admin'
dbPawd='mdp'
# Dossier de sauvegarde local
dbBackup='/home/theophile/backup'
# Condition si le dossier de sauvegarde n'existe pas, le créer :
if [ ! -d ${dbBackup} ]; then
mkdir ${dbBackup}
fi
# ATTENTION, il faut utiliser des ` pour encadrer l'expression de la variable DATE.. Alt Gr 7
DATE=`date +%Y-%m-%d`
HEURE=`date +%H:%M`
#------------------------------------------------------------------
case '$1' in
dump)
# Sauvegarde de la base en local, en un fichier zippé
mysqldump -u$dbUser -p$dbPawd $dbName | gzip -9 > ${dbBackup}/mysql_backup_${DATE}_${HEURE}.sql.gz
# Nettoyage des vieux fichiers (de plus de 4 jours)
find $dbBackup/mysql*.sql.gz -type f -mtime +$RETENTION -delete > /dev/null
echo 'Votre sauvegarde s'\''est réalisée correctement'
;;
restore)
# Restauration
mysql -uroot -e'DROP SCHEMA $dbName'
mysqladmin -uroot create $dbName
mysql -uroot -e'GRANT ALL ON $dbName.* TO $dbUser@localhost IDENTIFIED BY '\''$dbPawd'\''' $dbName
select choix in `ls $dbBackup` ; do
zcat $dbBackup/$choix | mysql -uroot $dbName
echo 'votre restauration a été effectuée'
break
done
;;
*)
echo 'je ne comprends que [dump|restore]'
;;
esac
# fermer le script :
exit 0
L'administrateur d'un serveur SQL veut, à partir du serveur SQL, automatiser la sauvegarde/restauration d'une base SQL.
Pour se faire, il veut que :
- en écrivant './script.sh dump' le script sauvegarde la base SQL en l'envoyant, à l'abri, sur un serveur distant.
- en écrivant './script.sh restore' le script permette de restaurer la base sauvegardée depuis le serveur distant, en offrant le choix du fichier de sauvegarde à récupérer
- le nom des fichiers de sauvegarde comporte la date et l'heure auxquelles ils sont sauvegardés.
- le nombre de sauvegardes stockées n'excède pas 5 (on ne garde que les 5 dernières sauvegardes).
Conseils Préliminaires pour pouvoir tester le script !
#!/bin/bash
# PREAMBULE
# L'échange de clefs publiques doit être réciproque entre le serveur SQL et le serveur de backup.
# Ceci afin de permettre le téléversement et téléchargement des backups.
# rsync doit être préalablement installé sur les 2 serveurs.
# les chemins dbBackup et dbBackupBAK doivent avoir été créé sur les serveurs avant d'être renseignés ici.
# Variable paramètres (nombre de backups à conserver)
RETENTION=5
# Informations base de donnée (sur le serveur GLPI)
dbName="glpi"
dbUser="admin"
dbPawd="mdp"
# Accès au serveur SQL local (ici, le serveur GLPI):
SSHportSQL=22
userSQL="admin"
pawdSQL="Gca123456,"
IPservLOCAL="10.100.1.203"
# Accès au serveur de Backup distant (ici, le serveur WEB1):
IPservBAK="10.100.1.202"
SSHportBAK=22
SRVuserBAK="theophile"
# Dossier de sauvegarde local
dbBackup="/home/theophile/backup"
# Dossier de sauvegarde sur le serveur de Backup distant :
dbBackupBAK="/home/admin/backup"
# Condition si le dossier de sauvegarde n'existe pas, le créer :
if [ ! -d ${dbBackup} ]; then
mkdir ${dbBackup}
fi
# ATTENTION, il faut utiliser des ` pour encadrer l'expression de la variable DATE.. Alt Gr 7
DATE=`date +%Y-%m-%d`
HEURE=`date +%H:%M`
#------------------------------------------------------------------
case "$1" in
dump)
# Sauvegarde de la base en local, en un fichier zippé
mysqldump -u$dbUser -p$dbPawd $dbName | gzip -9 > ${dbBackup}/mysql_backup_${DATE}_${HEURE}.sql.gz
# Sauvegarde de la base sur le serveur de Backup distant
rsync -avz -e "ssh -p $SSHportBAK" --delete $dbBackup/* $userSQL@$IPservBAK:$dbBackupBAK
# Nettoyage des vieux fichiers en local (de plus de 4 jours)
find $dbBackup/mysql*.sql.gz -type f -mtime +$RETENTION -delete > /dev/null
echo "Votre sauvegarde s'est réalisée correctement"
;;
restore)
# Restauration depuis le serveur de backup distant (ici, le serveur WEB1)
mysql -uroot -e"DROP SCHEMA $dbName"
mysqladmin -uroot create $dbName
mysql -uroot -e"GRANT ALL ON $dbName.* TO $dbUser@localhost IDENTIFIED BY '$dbPawd'" $dbName
selectSURserver=`ssh -p $SSHportBAK $userSQL@$IPservBAK "ls '$dbBackupBAK'"`
select choix in $selectSURserver ; do
scp -P $SSHportSQL $userSQL@$IPservBAK:$dbBackupBAK/$choix /tmp/backup.sql.gz
zcat /tmp/backup.sql.gz | mysql -uroot $dbName
echo "votre restauration a été effectuée"
rm /tmp/backup.sql.gz
break
done
;;
*)
echo "je ne comprends que [dump|restore]"
;;
esac
# fermer le script :
exit 0