Backup de base de donnée

La copie a chaud de bases de données MySql m’étant assez étrangère et de réputation assez peu flatteuse, nous avons pris l’habitude de réaliser nos backups en dumpant les tables des bases de données. Le but de ce script est donc, via une simple commande Bash, de créer un dump archivé de chacun des tables d’une base de donnée ciblée.
Le script permet de réaliser un backup quotidien dans une structure permettant une historisation sans limite.

Fichier db-backup.sh

#!/bin/bash 
# Paramètres de connexion à la DB
MYSQL_USER= »dbuser »
MYSQL_PASSWORD= »pwddbuser »
MYSQL_DB= »mountyhall_main »
# emplacement des binaires de mysql
MYSQLDUMP_BIN= »/usr/bin/mysqldump »
MYSQL_BIN= »/usr/bin/mysql »
# emplacement du présent module de backup
BACKUP_ROOT = « /home/mountyhall/db-backup »
FIC_LISTE_TABLES= »${BACKUP_ROOT}/tbl_${MYSQL_DB}.txt »
BACKUP_DIR= »${BACKUP_ROOT}/${MYSQL_DB}/ »`date ‘+%Y’` »/ »`date ‘+%m’` »/ »`date ‘+%d’`
echo « ################################################ »
echo « Debut du backup : « `date ‘+%F %H:%M:%S’`
# Creation du repertoire de backup
echo « Creation du repertoire de backup »
mkdir -p ${BACKUP_DIR}
echo « Creation OK »
# Recuperation de la liste des tables
echo « Recuperation de la liste des tables a sauvegarder »
${MYSQL_BIN} -u${MYSQL_USER} -p${MYSQL_PASSWORD} -N -B -e ‘SHOW TABLES’ ${MYSQL_DB} > ${FIC_LISTE_TABLES}
echo « Recuperation OK »
# Backup des tables echo « Sauvegarde des tables »
for TABLE in `cat ${FIC_LISTE_TABLES}` do
echo « ##### Table ${TABLE} ##### »
echo « Debut : « `date ‘+%F %H:%M:%S’`
${MYSQLDUMP_BIN} –opt -u${MYSQL_USER} -p${MYSQL_PASSWORD} –default-character-set=latin1 ${MYSQL_DB} ${TABLE} | gzip > ${BACKUP_DIR}/${TABLE}.gz
echo « Fin : « `date ‘+%F %H:%M:%S’`
done
echo « Fin sauvegarde tables »
echo « Fin du backup : « `date ‘+%F %H:%M:%S’`
echo « ################################################ »

Vous pouvez le voir, nous disposons ainsi d’une archive quotidienne du dump classé dans l’arborescence
./nom de la DB/année/mois/jour/

Il suffira alors de lancer votre script en bash via le cron du serveur et de mettre le résultat dans un fichier de log par exemple.

bash /home/mountyhall/db-backup/db-backup.sh >> /home/mountyhall/db-backup/db-backup.log 2>&1

{mos_fb_discuss:6}

Laisser un commentaire

Votre adresse de messagerie ne sera pas publiée. Les champs obligatoires sont indiqués avec *

32 − 26 =