Sauvegarder automatiquement ses bases de données MySQL

Mathias WOLFF published on
4 min, 606 words

Categories: Divers

Tags: MySQL

Je ne vais pas rappeler le caractère indispensable des sauvegardes. Les bases de données ne doivent surtout pas être oubliées. Nous allons voir comment gérer de manière automatique les sauvegardes et garder un historique (c'est toujours utile, surtout en cas de corruption)

Pour cela, nous allons faire appel à AutoMySQLBackup .

Présentation :

AutoMySQLBackup permet de faire une sauvegarde via une tâche cron, chaque jour, chaque semaine et chaque mois. Il offre la possibilité de sauvegarder une ou plusieurs bases de données, d'exclure des tables (très utile quand vous avez des tables très volumineuses, mais que vous ne voulez garder que la conf. Par exemple, certaines tables de log).

Ce script peut vous envoyer un email de notification. Cet email pouvant contenir le fichier de backup en pièce attachée. Bien entendu, les sauvegardes sont compressées et peuvent être cryptées.

Il est possible de garder plusieurs sauvegardes, par exemple, les 5 dernières sauvegardes journalières, les 3 dernières sauvegardes hebdomadaires ou les 12 dernières sauvegardes mensuelles (pratique pour respecter certaines obligations d'archivage).

Enfin, et cette fonctionnalité n'est pas des moindres pour les grosses bases, il est possible d'effectuer des sauvegardes incrémentales.

Installation :

Il suffit de télécharger le dossier zippé sur sourceforge , d'effectuer une extraction. Je vous conseille bien entendu de lire le fichier README, puis lancer le script :

install.sh

Configuration :

La configuration s'effectue dans un seul fichier,

vi /etc/automysqlbackup/myserver.conf

Le contenu de ce fichier est bien commenté. Il suffit de compléter et de décommenter les bonnes lignes. Voici une extraction de la version originale sans les commentaires :

CONFIG_configfile="/etc/automysqlbackup/automysqlbackup.conf"
CONFIG_backup_dir='/var/backup/db'
CONFIG_do_monthly="01" ; le jour du backup mensuel, ini le 1er du mois
CONFIG_do_weekly="5" ; le jour du backup hebdo, ici le vendredi
CONFIG_rotation_daily=6
CONFIG_rotation_weekly=35 ; on garde les 5 dernières semaines de backup
CONFIG_rotation_monthly=150 ; on garde les 5 derniers mois
CONFIG_mysql_dump_usessl='yes'
CONFIG_mysql_dump_username='root'
CONFIG_mysql_dump_password=''
CONFIG_mysql_dump_host='localhost'
CONFIG_mysql_dump_socket=''
CONFIG_mysql_dump_create_database='no'
CONFIG_mysql_dump_use_separate_dirs='yes'
CONFIG_mysql_dump_compression='gzip'
CONFIG_mysql_dump_commcomp='no'
CONFIG_mysql_dump_latest='no'
CONFIG_mysql_dump_max_allowed_packet=''
CONFIG_db_names=()
CONFIG_db_month_names=()
CONFIG_db_exclude=( 'information_schema' )
CONFIG_mailcontent='log'
CONFIG_mail_maxattsize=4000
CONFIG_mail_address='root'
CONFIG_encrypt='no'
CONFIG_encrypt_password='password0123'

Les sauvegardes journalières sont gardées une semaine (ce n'est pas modifiable), les sauvegardes hebdomadaires 5 semaines et les sauvegardes mensuelles 5 mois. Vous pouvez modifier ces 2 paramètres (CONFIG_rotation_weekly et CONFIG_ROTATION_monthly). A notre, que la valeur doit être exprimée en jour, soit pour 5 semaines, il faut indiquer 35 !

Par défaut, le script va prendre les valeurs définies dans votre fichier, et dans le cas où il ne trouve pas la variable car vous ne l'avez pas définie, il va utiliser les valeurs par défaut comme définies dans ce fichier :

/etc/automysqlbackup/automysqlbackup.conf

Si un paramètre vous pose question, n'hésitez pas à poser une question en commentaire.

Après avoir configurer votre fichier aux petits oignons, vous allez créer le fichier suivant :

/etc/cron.daily/runmysqlbackup

Vous copiez le code suivant :

#!/bin/sh

/usr/local/bin/automysqlbackup -bc "/etc/automysqlbackup/myserver.conf"

chown root.root /var/backup/db* -R
find /var/backup/db* -type f -exec chmod 400 {} ;
find /var/backup/db* -type d -exec chmod 700 {} ;

Ensuite, il faut mettre les bons droits et rendre le fichier exécutable.

Le répertoire de sauvegarde par défaut se situe dans :

/var/backup/db

Vous y trouverez une arborescence claire :

  • daily : sauvegardes journalières
  • fullschema : sauvegardes complètes
  • latest : dernières sauvegardes
  • monthly : sauvegardes mensuelles
  • status : les résultats de l'execution du script
  • tmp : fichiers temporaires
  • weekly : sauvegardes hebdomadaires

Un autre élément très intéressant, c'est la possibilité de lancer des commandes avant et après l'exécution du script. Cela permet par exemple d'exécuter suite à la sauvegarde, un script copiant dans un autre lieu votre précieux backup.