Initialement, j'utilisais :

mysqldump --host="$MYSQL_HOST" --user="$MYSQL_LOG" --password="$MYSQL_PASS" --quote-names --complete-insert --extended-insert --add-drop-table --compress --all-databases > monFichierDumpContenantTouteLesBases.sql

Mais mon fichier intégral de 3Go est impossible à gérer pour ré-intégrer une seule base.

Voici donc un script pour dumper base par base : dumpMysqlBaseParBase.sh :

#!/bin/bash
 
export BACKUPDIR=~/BackMySqlParBases/
export BTMPFILE=~/BackMySqlParBases.tmp
export DATE=`/bin/date '+%Y%m%d'`
export MYSQL_HOST="localhost"
export MYSQL_USER="monUserMysql"
export MYSQL_PASS="monPassMysql"
 
[ -d $BACKUPDIR ] || mkdir -p $BACKUPDIR
 
mysql -h ${MYSQL_HOST} -u ${MYSQL_USER} -p${MYSQL_PASS} > ${BTMPFILE} <<FinDeSession
SHOW DATABASES;
FinDeSession
 
if [ -f ${BTMPFILE} ] ; then
        for db in `cat ${BTMPFILE} | egrep -v "Database|information_schema"`
        do
                echo $db
                export FILEBK=$db.$DATE.sql
                mysqldump -h ${MYSQL_HOST} -u ${MYSQL_USER} -p${MYSQL_PASS} $db > $BACKUPDIR/$FILEBK
                #[ -f $BACKUPDIR/$FILEBK ] && gzip --force --best $BACKUPDIR/$FILEBK
                #[ -f $BACKUPDIR/$FILEBK.gz ] && scp $BACKUPDIR/$FILEBK.gz $HOST:$BACKUPDIR/
        done
fi

Et pour finir, l'automatisation par cron :

#  Dump BASE PAR BASE
#               Suppression des vieux fichiers
30 02 * * * find ~/BackMySqlParBases -mtime +3 -type f -exec rm -fv {} \;
#               Dump
45 02 * * * ./dumpMysqlBaseParBase.sh

Également afin d'exporter ses dumps vers un autre serveur de sauvegarde on peut reprendre le script afin qu'il envoi les fichiers automatiquement par FTP : backupMysqlDumpBaseParBase.sh :

#!/bin/sh
 
### Début de la configuration
 
# Nom du dossier (dans le home) qui contiendra les dumps
export BACKUP_FOLDERNAME=BackUp
export BACKUP_DIR=~/${BACKUP_FOLDERNAME}/
export BACKUP_TMPFILE=~/${BACKUP_FOLDERNAME}.tmp
 
export DATE=`date +"%Y-%m-%d"`
 
# Dump MySql
# Serveur MySql :
export MYSQL_HOST="localhost"
# Identifiant :
export MYSQL_USER="monUtilisateurMysql"
# Mot de passe :
export MYSQL_PASS="monPassMysql"
 
# Dépôt automatique par FTP
# Serveur FTP :
FTP_HOST="monAdresseDuServeurFtp"
# Identifiant :
FTP_USER="monUtilisateurFtp"
# Mot de passe :
FTP_PASS="monMotDePasseFtp"
 
### Fin de la configuration
 
 
# Ce script doit être a la racine des fichiers a archiver
cd ~
 
 
# Suppression de l'ancien backup
rm -fr ${BACKUP_FOLDERNAME}
 
 
# (Re) Création du dossier de backup
[ -d ${BACKUP_DIR} ] || mkdir -p ${BACKUP_DIR}
 
 
## Sauvegarde locale
#for fichier in `ls`
#do
#   if [ -d "$fichier" ]
#   then
#       echo "$fichier (répertoire)"
#   else
#       echo "$fichier"
#   fi
#   tar --exclude ${BACKUP_FOLDERNAME} -czvf ${BACKUP_DIR}$DATE.$fichier.tar.gz $fichier 1>${BACKUP_DIR}$DATE.$fichier.txt
#done
 
 
# Sauvegarde des bases MySql
mysql --host="${MYSQL_HOST}" --user="${MYSQL_USER}" --password="${MYSQL_PASS}" > ${BACKUP_TMPFILE} <<FinDeSession
SHOW DATABASES;
FinDeSession
 
if [ -f ${BACKUP_TMPFILE} ] ; then
        for db in `cat ${BACKUP_TMPFILE} | egrep -v "Database|information_schema"`
        do
                echo "Dump BASE : "$db
                export FILEBK=$DATE.${MYSQL_HOST}.$db.sql
                mysqldump -h ${MYSQL_HOST} -u ${MYSQL_USER} -p${MYSQL_PASS} $db > ${BACKUP_DIR}/$FILEBK
                [ -f ${BACKUP_DIR}/$FILEBK ] && gzip --force --best ${BACKUP_DIR}/$FILEBK
                #[ -f ${BACKUP_DIR}/$FILEBK.gz ] && scp ${BACKUP_DIR}/$FILEBK.gz $HOST:${BACKUP_DIR}/
        done
fi
 
 
# Envoi via ftp
# lftp -e "cd $REMOTE ;  put $FILE ; quit" "$SERVER"
 
for fichier in `ls ${BACKUP_DIR}`
do
 
# ### Envoi FTP   ###
echo -n "Envoi FTP du fichier : $fichier ..."
ftp -n ${FTP_HOST} <<FinDeSession
user "${FTP_USER}" "${FTP_PASS}"
binary
prompt
cd /
lcd ${BACKUP_DIR}
put $fichier
bye
FinDeSession
echo " ... FIN de transmission"
 
done
 
echo "Fin de dump Mysql et d'envoi via Ftp"

N'oubliez pas de purger régulièrement votre serveur de sauvegarde de ces vieux fichiers soit manuellement en ligne de commande FTP mdelete ou via un script que vous créerez. Pour ne plus répondre au messages de confirmation, utilisez "prompt"