Script de sauvegarde des bases MySQL locales par mysqldump

Publié le 19 novembre 2010 par Rumbaya

Testé sur Debian 5.0

Un script bash basique pour faire un dump individuel de chaque base du serveur local avec mysqldump, y compris information_schema. En fin de script, un dump global est réalisé, et un rapport est envoyé.

?Download backup_mysql.sh

#!/bin/bash
# Backup des bases MySQL du Serveur local
# Initialisations
# L'utilisateur doit avoir les privilèges globaux SELECT, SHOW_DATABASES et LOCK_TABLES
MYSQL_USER="myuser"
MYSQL_PASSWD="mypassword"
TMP_LOG="/tmp/bmydb.log"
LOG_FILE="/var/log/bmydb.log"
BACKUP_DIR="/var/backups"
# Destinataire du rapport
ADMIN="root"
echo "+++$(date) Debut $0" > $TMP_LOG	
 
# Fonction sortie du script
sortie() {
	# Enregistre la fin de traitement dans la log
	echo "+++$(date) Fin $0" >> $TMP_LOG
	cat $TMP_LOG >> $LOG_FILE
	if [ $1 = 0 ]; then
		mail -s "Rapport $0" $ADMIN < $TMP_LOG
	else
		mail -s "Erreur execution $0" $ADMIN < $TMP_LOG
	fi
	rm -f $TMP_LOG
	exit $1
}	
 
# Récupération de la liste des bases
dbl=$(mysql --user $MYSQL_USER --password=$MYSQL_PASSWD --batch --silent --execute="SHOW DATABASES;")  2>> $TMP_LOG
if [ $? -ne 0 ]; then
	echo "$(date) Erreur lors de la récupération de la liste des bases" >> $TMP_LOG
	sortie 1
fi
 
# Dump individuel des bases
for db in $dbl
do
	mysqldump --user $MYSQL_USER --password=$MYSQL_PASSWD --result-file=$BACKUP_DIR/mysql_$db $db 2>> $TMP_LOG
	if [ $? -gt 0 ]; then
		# On réessaye avec l'option --skip-lock-tables 
		mysqldump --user $MYSQL_USER --password=$MYSQL_PASSWD --skip-lock-tables --result-file=$BACKUP_DIR/mysql_$db $db 2>> $TMP_LOG
		if [ $? -gt 0 ]; then
			echo "$(date) Erreur Dump base $db" >> $TMP_LOG
		fi
	else
		gzip -f $BACKUP_DIR/mysql_$db
		echo "$(date) Base $db sauvegardée dans $BACKUP_DIR/mysql_$db.gz" >> $TMP_LOG
	fi
 
done
# Dump Global
mysqldump --user $MYSQL_USER --password=$MYSQL_PASSWD --result-file=$BACKUP_DIR/mysql_full --all-databases
if [ $? -gt 0 ]; then
	echo "$(date) Erreur Dump Global" >> $TMP_LOG
else
	gzip -f $BACKUP_DIR/mysql_full
	echo "$(date) Dump global effectué dans $BACKUP_DIR/mysql_full.gz" >> $TMP_LOG
fi
 
sortie 0