Dump automatique
Sauter à la navigation
Sauter à la recherche
Présentation
Cette page a pour objet de décrire comment mettre en place un dump automatique d'une base de données MySQL.
Script
Définir un dossier dans lequel sera stocké le script de dump (exemple : /data/scripts
) et le sécuriser :
mkdir -p /data/scripts chmod 700 /data/scripts
Y créer un fichier (exemple : dump_bdd.sh) et le sécuriser :
touch /data/scripts/dump_bdd.sh chmod 700 /data/scripts/dump_bdd.sh
Y renseigner le contenu suivant :
#!/bin/bash
#set -x
# Initialisation variables
HOST=`echo $HOSTNAME|awk -F\. '{print $1}'`
BCK_DIR="/data/save/$HOST_BDD" #Dossier de sauvegarde
LOG_DIR="/data/logs/$HOST_BDD" #Dossier des logs
DDATE=`date +'%Y%m%d'` #Date du jour
DCDATE=`date +'%Y%m%d %T'` #Date complete du jour
BCK_RETENTION=10 #Durée de rétention des sauvegardes
LOG_RETENTION=10 #Durée de rétention des logs
MAIL_DESTINATION="mymail@mydomain.com" #Adresse(s) mail destinatrice(s) du fichier dump
# Création des dossiers
mkdir -p $BCK_DIR
mkdir -p $LOG_DIR
# Lancement du traitement
echo $(date "+%F %T")" : Début Batch Sauvegarde des BDD MySQL du ${DCDATE} du serveur ${HOST}" > ${LOG_DIR}/BCK_MYSQL_${DDATE}.log | tee
echo $(date "+%F %T")" : Sauvegarde des BDD MySQL" >> ${LOG_DIR}/BCK_MYSQL_${DDATE}.log | tee
mysqldump --defaults-extra-file=/root/.credentials/.mysqldump.cred --login-path=local --opt -A > ${BCK_DIR}/BCK_MYSQL_${DDATE}.dmp
echo $(date "+%F %T")" : Fin de la sauvegarde" >> ${LOG_DIR}/BCK_MYSQL_${DDATE}.log
echo $(date "+%F %T")" : Compression de la sauvegarde" >> ${LOG_DIR}/BCK_MYSQL_${DDATE}.log| tee
gzip -f ${BCK_DIR}/BCK_MYSQL_${DDATE}.dmp
echo $(date "+%F %T")" : Envoi de la sauvegarde sur la boite mail" >> ${LOG_DIR}/BCK_MYSQL_${DDATE}.log| tee
echo "La sauvegarde MySQL du serveur ${HOST} se trouve en attachment de ce mail"|mail -a ${BCK_DIR}/BCK_MYSQL_${DDATE}.dmp.gz -s "Sauvegarde BDD ${HOST} du `date +'%d-%m-%Y'`" ${MAIL_DESTINATION}
echo $(date "+%F %T")" : Purge des anciennes sauvegardes et logs" >> ${LOG_DIR}/BCK_MYSQL_${DDATE}.log| tee
find ${BCK_DIR} -name "BCK_MYSQL*.dmp.gz" -mtime +${BCK_RETENTION} -exec rm -rf {} \;
find ${LOG_DIR} -name "BCK_MYSQL*.log" -mtime +${LOG_RETENTION} -exec rm -rf {} \;
echo $(date "+%F %T")" : Fin Batch Sauvegarde des BDD MySQL du ${DCDATE}" >> ${LOG_DIR}/BCK_MYSQL_${DDATE}.log| tee
# Fin du traitement
MySQL
Utilisateur
Créer utilisateur MySQL dont le rôle sera uniquement de réaliser des dumps (par exemple : mysqldump_user) et lui attribuer les droits correspondants :
CREATE USER 'mysqldump_user'@'localhost' IDENTIFIED BY 'xxxxxxxxxxxxxxx';
GRANT USAGE, SELECT, LOCK TABLES, SHOW VIEW, EVENT, TRIGGER ON *.* TO 'mysqldump_user'@'localhost';
FLUSH PRIVILEGES;
Identifiants
Créer un dossier caché (par exemple /root/.credentials
) et le sécuriser :
mkdir /root/.credentials chmod 700 /root/.credentials
Créer un fichier caché (par exemple .mysqldump.cred
) et le sécuriser :
touch /root/.credentials/.mysqldump.cred
Y ajouter le contenu suivant :
[mysqldump]
user=mysqldump_user
password=xxxxxxxxxxxxxx
Et le sécuriser en le mettant en lecture seule :
chmod 400 /root/.credentials/.mysqldump.cred
crontab
Editer la crontab et y ajouter les lignes suivantes :
## Sauvegarde intégrale de la base données tous les jours à 02h00 du matin 0 2 * * * /data/scripts/dump_bdd.sh