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 !

#!/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

⬆️ Retour en haut de la page