RSS

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

21 Déc

Ce Cours informatique 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

Publicités
 
Poster un commentaire

Publié par le décembre 21, 2012 dans Admin Linux, Sécurite réseaux

 

Étiquettes : ,

Laisser un commentaire

Choisissez une méthode de connexion pour poster votre commentaire:

Logo WordPress.com

Vous commentez à l'aide de votre compte WordPress.com. Déconnexion /  Changer )

Photo Google+

Vous commentez à l'aide de votre compte Google+. Déconnexion /  Changer )

Image Twitter

Vous commentez à l'aide de votre compte Twitter. Déconnexion /  Changer )

Photo Facebook

Vous commentez à l'aide de votre compte Facebook. Déconnexion /  Changer )

Connexion à %s

 
%d blogueurs aiment cette page :