Script de backup pour base SQL
Script No.1 (Sauvegarde et restauration en local)
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
Script No.2 (Sauvegarde et restauration à distance)
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 !
- Debian 11 sur les 2 serveurs
- Installer mariadb-server sur le serveur SQL
- Installer rsync sur les 2 serveurs (SQL et backup)
- Créer une base SQL ou importez-en une sur le serveur SQL (afin qu'il y ait quelque chose à sauvegarder !)
- Ne pas oublier de générer les clefs SSH sur le serveur SQL et d'envoyer la clef publique depuis le serveur SQL AU serveur de Backup distant, afin que le script puisse s'exécuter.
- Ne pas oublier de créer les dossiers de Backup sur le serveur SQL ET sur le serveur de Backup distant
- Compléter les variables du Script SQL avec vos informations !
#!/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
↑ Haut de page