Accueil > Backup, Mysql, Script > Script de backup de bases mysql

Script de backup de bases mysql

Lors de mon précédent article, nous avons vu comment faire une sauvegarde des fichiers avec l’outil backup-manager.
Cet outil offre la possibilité de faire une sauvegarde des bases mysql, mais j’ai choisi de ne pas utiliser cette possibilité, et d’utiliser un script bash que j’ai trouver ici en le modifiant un peu à mon goût.

Il est cependant possible d’utiliser backup-manager pour sauvegarder les fichiers brut du serveur mysql qui se trouvent généralement dans /var/lib/mysql et de les restaurer avec cette méthode que j’ai utiliser il y a quelques temps.
Nous pouvons aussi faire un dump des bases mysql avec backup-manager.

Bon assez de blabla voilà le script que j’ai commenter avec le maximum d’informations. Vous ne devriez pas avoir de mal à l’utiliser.
Il vous faudra l’outil ncftp pour qu’il fonctionne, afin d’envoyer les bases sur un serveur ftp.

sudo aptitude install ncftp

Copier coller ce script dans un fichier backup_sql.sh par exemple.
Puis chmod +x backup_sql.sh pour le rendre exécutable.

#!/bin/bash
# User + pass + host du serveur mysql à sauvegarder
SQL_USER="sqluser"
SQL_PASS="p@ssw0rd"
SQL_HOST="localhost"
 
# Chemin des différent programme utiliser, ne rien toucher ici
MYSQL="$(which mysql)"
MYSQLDUMP="$(which mysqldump)"
CHOWN="$(which chown)"
CHMOD="$(which chmod)"
GZIP="$(which gzip)"
 
# Emplacement du dossier de backup local (sans slash a la fin)
DEST="/backup"
 
# Sous répertoire local ou on sauvegarde les fichiers sql
DEST_SQL="$DEST/sql"
 
# Date et heure
NOW="$(date +"%d-%m-%Y")"
HEURE=$(date +%d"-"%m"-"%Y"@"%H":"%M"'"%S)
 
# Indiquez ici les bases a ne PAS sauvegarder séparer par un espaces
IGGY=""
 
# On initialise les variables
FILE=""
DBS=""
 
# On crée le répertoire de backup sql si pas déjà fait
[ ! -d $DEST_SQL ] && mkdir -p $DEST_SQL || :
 
# On limite l'accès a root uniquement 
# (supprimer les commentaires si vous souhaitez utiliser cette option)
#$CHOWN 0.0 -R $DEST_SQL
#$CHMOD 0600 $DEST_SQL
 
# On liste les bases de données
DBS="$($MYSQL -u $SQL_USER -h $SQL_HOST -p$SQL_PASS -Bse 'show databases')"
 
for db in $DBS
do
    skipdb=-1
    if [ "$IGGY" != "" ];
    then
        for i in $IGGY
        do
            [ "$db" == "$i" ] && skipdb=1 || :
        done
    fi
 
    if [ "$skipdb" == "-1" ] ; then
      FILE="$DEST_SQL/$db.$NOW.gz"
# On boucle, et on dump toutes les bases et on les compresse avec gzip
      $MYSQLDUMP -u $SQL_USER -h $SQL_HOST -p$SQL_PASS $db | $GZIP -9 > $FILE
    fi
done
 
# Nombres de jour de backup a conserver (ici 7 jours)
j=7
jours_a_delete=$(date +%d-%m-%Y --date "$j days ago")
 
# Configuration des répertoires de backup pour le ftp
DIR_BACKUP_SQL="$DEST_SQL"
DIR_DIST_BACKUP_SQL="/sql/"
 
# Configuration login, mot de pass du serveur ftp
FTP_USER="ftpuser"
FTP_PASS="p@ssw0rd"
FTP_HOST="backup.domaine.com"
 
#######################
## Upload sur le ftp ##
#######################
ncftp -u $FTP_USER -p $FTP_PASS $FTP_HOST < <TOTO
cd $DIR_DIST_BACKUP_SQL
lcd $DIR_BACKUP_SQL
mkdir $NOW
cd $NOW
put -r *
cd ..
rm -rf $jours_a_delete
bye
TOTO
 
# On delete le backup local
cd $DEST_SQL
rm -r *
 
# Si vous exécuter le script à la main
# on peu faire un echo afin de voir si tout c'est bien dérouler
echo "Envoi reussi le $HEURE"

En cas de problèmes, les commentaires sont là pour :-)

Je vous recommande aussi la lecture des sujets suivants:

Catégories:Backup, Mysql, Script
  1. Pas encore de commentaire
  1. Pas encore de trackbacks