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é.
#!/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