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à ...