Tutoriel de sauvegarde automatisées de bases de données MySQL, compression en tar.gz et envoi par FTP sous Linux Debian

23/09/2010 - 14495 consultations - 0 commentaire


Ce tutoriel vous présente comment automatiser la sauvegarde de base de données MySQL en compressant les sauvegardes et en les plaçant sur un FTP distant.


Ce script shell nécessite l'installation d'un client FTP particulier (ncftp) permettant d'automatiser l'envoi des fichiers par FTP

apt-get update
apt-get install ncftp

Ce script effectue les actions suivantes:
  - Listing des bases de données
  - Création d un fichier SQL de sauvegarde de chaque base de données
  - Compression de chacun des fichiers en tar.gz
  - Envoi de chacun des fichiers tar.gz sur un FTP distant
  - Suppression des fichiers de sauvegarde du serveur de production
Il vous suffit de créer un fichier bash :
nano /home/backup_mysql/backup_ftp_mysql.sh

Y coller le code du script et le sauvegarder ...

Autoriser le script à s'exécuter :
chmod 755 /home/backup_mysql/backup_ftp_mysql.sh

Enfin ajouter le script au crontab pour le faire s'exécuter tous les jours à 01h05 par exemple :
crontab -e

Ajouter la ligne suivante :
05 01 * * * /home/backup_mysql/backup_ftp_mysql.sh

Voici le script :

#!/bin/sh

#---------------------------------------------------------------#
# Script de sauvegarde MySQL XENETIS.ORG
#
# Nécessite le client FTP NCFTP
#       #apt-get install ncftp
#
# Crontab / tous les jours ? 01h05
#       #crontab -e
#
# 05 01 * * * /home/backup_mysql/backup_ftp_mysql.sh
#---------------------------------------------------------------#

# Configuration du FTP distant
loginftp=mon_login_ftp
passftp=mon_mot_de_passe_ftp
hostftp=mon_serveur_ftp.com
portftp=21
dossierdistantftp=/home/backup_serveur_mysql
dossierlocalsql=/home/backup_mysql

# Configuration SQL LOCAL
loginsql=mon_login_mysql
passsql=mon_mot_de_passe_sql

# On liste les databases
DATABASES="$(mysql -u $loginsql -p$passsql -Bse 'show databases;')";

# Si une erreur survient pendant la liste des bases
if [ ! $? -eq 0 ]; then
       echo " - Une erreur s'est produite pendant le listage des bases de données";
       exit 1;
fi


# Boucle : pour créer le sql de chaque base
for BASE in $DATABASES
do
    # Analyse de la base
    mysqlcheck -u $loginsql -p$passsql -c -a $BASE > /dev/null

    echo " - Sauvegarde de la base "$BASE;

    mysqldump -u $loginsql -p$passsql --add-drop-database -B  --add-drop-table --complete-insert --routines --triggers --allow-keywords --max_allowed_packet=50M --force $BASE -R > $dossierlocalsql"/"$BASE".sql";
done


# Boucle : pour créer le tar.gz de chaque base
for BASE in $DATABASES
do
    tar -czf $dossierlocalsql"/"$BASE".tar.gz"  $dossierlocalsql"/"$BASE".sql";  
    ncftpput -u $loginftp -p $passftp -P $portftp -F $hostftp $dossierdistantftp $dossierlocalsql"/"$BASE".tar.gz";  
  
done

# Boucle : pour effacer les fichiers de sauvegarde du serveur de production
for BASE in $DATABASES
do
    rm $dossierlocalsql"/"$BASE".sql"
    rm $dossierlocalsql"/"$BASE".tar.gz";  
done

Explication du script :

Déclaration des variables :
# Configuration du FTP distant
loginftp=mon_login_ftp
passftp=mon_mot_de_passe_ftp
hostftp=mon_serveur_ftp.com
portftp=21
dossierdistantftp=/home/backup_serveur_mysql
dossierlocalsql=/home/backup_mysql

# Configuration SQL LOCAL
loginsql=mon_login_mysql
passsql=mon_mot_de_passe_sql

Stockage de la liste des bases de données dans la variable DATABASES :
DATABASES="$(mysql -u $loginsql -p$passsql -Bse 'show databases;')";

On vérifie que la connexion s'est bien passée :
if [ ! $? -eq 0 ]; then
    echo " - Une erreur s'est produite pendant le listage des bases de données";
    exit 1;
fi

Une première boucle pour créer les fichiers SQL :
for BASE in $DATABASES
do
    # Analyse de la base
    mysqlcheck -u $loginsql -p$passsql -c -a $BASE > /dev/null

    echo " - Sauvegarde de la base "$BASE;

    mysqldump -u $loginsql -p$passsql --add-drop-database -B  --add-drop-table --complete-insert --routines --triggers --allow-keywords --max_allowed_packet=50M --force $BASE -R > $dossierlocalsql"/"$BASE".sql";
done

Une seconde boucle pour générer les tar.gz et les placer sur le FTP :
for BASE in $DATABASES
do
    tar -czf $dossierlocalsql"/"$BASE".tar.gz"  $dossierlocalsql"/"$BASE".sql";  
    ncftpput -u $loginftp -p $passftp -P $portftp -F $hostftp $dossierdistantftp $dossierlocalsql"/"$BASE".tar.gz";  
  
done

Enfin une dernière boucle pour nettoyer le dossier de sauvegarde :
for BASE in $DATABASES
do
    rm $dossierlocalsql"/"$BASE".sql"
    rm $dossierlocalsql"/"$BASE".tar.gz";  
done

Voili voilà ...

Commentez cet article

Nom (obligatoire)
E-mail (obligatoire)
Site Internet (facultatif)
code anti-spam

Me tenir inform� des nouveaux messages


terminal.pngInstallation de subversion un dépôt de données SVN
Vous trouverez dans cet article l'intégralité de l'installation d'un entrepôt de sources subversion, celà permet de gérer les version en développement de sauvegarder toutes les modifications de vos sources de sites ou programmes
encrypted.pngSauvegarde par ssh avec la commande scp avec clé publique - clé privée
Ce tutoriel présente comment effectuer une copie de fichier entre 2 serveurs en utilisant scp, en passant par des clé publique et clé privée afin de ne pas avoir à saisir de mot de passe
kcmdevices.pngForcer umount quand vous avez le message : device is busy sous Linux Debian
Ce mini tutoriel vous présente comment Démonter un point de montage quand celui ci ne veux pas être démonté
terminal.pngServeur ftp proftpd avec utilisateurs virtuels sous linux debian ubuntu
Ce tutoriel vous présente comment installer le serveur ftp proftpd à partir des paquets debian. Pour éviter de créer autant d'utilisateurs Linux que de compte FTP il est possible de créer des utilisateurs virtuels seulement disponibles pour le serveur FTP
database.pngSauvegarder restaurer base de données MySQL sous Debian
Ce mini tutoriel vous présente comment sauvegarder, et restaurer une base de données MySQL en mode console sous debian
ark.pngVérification automatique des mises à jour Linux Debian avec cron-apt
Ce tutoriel vous présente comment savoir simplement quand votre serveur Linux Debian nécessite l'installation de nouvelles mises à jour avec cron-apt.
encrypted.pngCorriger l'erreur There is no public key available for the following key IDs après apt-get update
Ce mini tutoriel vous explique comment corriger l'erreur There is no public key available for the following key IDs
mail_generic.pngProblème à l'installation d'Exim4 : Could not perform immediate configuration on 'exim4-daemon-light'. sous Linux Debian
Il peut arriver que vous rencontriez un problème lors de l'installation d'Exim4, une erreur du style : Could not perform immediate configuration on 'exim4-daemon-light'.
ark.pngGestion de paquets sous debian etch et sarge et sous ubuntu
Cet article vous présente les commandes de gestion de paquets debian