Script de sauvegarde des bases MySQL locales par mysqldump

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é. Associé à une tache cron et à un backup distant avec rsnapshot ça permet de faire des sauvegardes historisées des bases MySQL d’un serveur.

#!/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
		else
			gzip -f $BACKUP_DIR/mysql_$db
			echo "$(date) Base $db sauvegardée dans $BACKUP_DIR/mysql_$db.gz avec l'option --skip-lock-tables" >> $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
No votes yet.
Please wait...

Laisser une réponse