Sauvegarder automatiquement ses bases de données 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.

19 Replies to “Sauvegarder automatiquement ses bases de données MySQL”

  1. bonjour,

    merci pour cette article très intéressent.

    si je veux sauvegarder deux base de données je doit créé un autre fichier de config ou je peux mettre le login et mot de passe et nom de la base de données dans le même fichier conf ?

    1. Bonjour,

      Il faut un fichier de conf par serveur. Tu appelles ce fichiers avec un nom différent, et tu lances autant de commande que de fichiers de conf.

      Mathias

  2. merci pour votre réponse, je nome comment ces différents fichier de conf pour qu'il soit pris en compte…

  3. bonjour,

    vous n'avez toujours pas répondu a ma question précédente (je nome comment ces différents fichier de conf pour qu’il soit pris en compte…)

    De plus, sur mon serveur où j'ai bien un backup tous les jours sur une base j'ai ce message par mail tous les jours : ERRORS REPORTED: MySQL Backup error Log for localhost – 2015-02-03_04h13m : du: WARNING: use –si, not -H; the meaning of the -H option will soon change to be the same as that of –dereference-args (-D).

    que dois-je faire ?

  4. @phpinformatique : je n'ai pas eu le temps de regarder. Néanmoins, en regardant le code du script vous trouverez aisément la réponse à votre question.

    A propos de l'erreur, la signification va dépendre de plusieurs facteurs, comme de l'OS, la version de MySQL ou de MariaDB …

  5. bonjour,

    je suis loin d’être une bête en PHP j'ai regarder le script, mais je n'ai pas trouvé l'information j'aimerai simplement savoir comment appeler mon 2eme fichier pour ma deuxième base…

  6. @phpinformatique

    Bonjour,

    Il faut changer le nom de ce fichier, /etc/automysqlbackup/myserver.conf . Vous créez autant de fichier que de bases à sauvegarder.

    Puis modifier le script de ta tâche cron : éditer ce fichier : /etc/cron.daily/runmysqlbackup :

    #!/bin/sh

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

    /usr/local/bin/automysqlbackup -bc "/etc/automysqlbackup/myserver2.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 {} ;

    Vous dupliquez la 2ème ligne en spécifiant les noms de fichiers de configuration. Dans mon exemple, j'ai myserver1.conf et myserver2.conf

  7. parfait ! cela fonctionne nickel merci beaucoup.

    il ne reste plus que le problème de mail journalier qui m'indique cela :

    "du: WARNING: use –si, not -H; the meaning of the -H option will soon change to be the same as that of –dereference-args (-D)"

    Je ne vois pas de quoi il parles.

  8. @phpinformatique

    Dans le script de backup, en ligne 1972, la commande du est invoquée avec l'option H. La commande du permet de récupérer l'espace disque occupé par un fichier ou un répertoire. La version de la commande du a évolué dans votre système incluant une modification de cette option. J'aurais préféré d'ailleurs que l'auteur du script utilise l'option -h. Vous pouvez remplacer -H par -h sans problème. Par ailleurs, ce n'est pas une partie critique du script, et ce n'est qu'un warning, donc rien d'inquiétant dans l'immédiat. Quel OS utilisez-vous ?

  9. merci pour votre réponse.

    je suis suis sous Centos.

    j'ai pas de ligne 1972 dans runmysqlbackup ou dans les .conf a quelle endoit doit-je regarder ?

  10. en effet, ce n'est qu'un Warning, mais c'est embêtant de recevoir deux mails pour rien en plus du spam 😉

  11. @phpinformatique Edite le fichier, et compte les lignes. Ou plus intelligent, fait une recherche avec "du", tu vas tomber sur la bonne ligne

  12. je comprend mieux je n'était pas dans le bon fichier il faut aller le chercher dans :

    /usr/local/bin/automysqlbackup

    donc j'ai bien la ligne 1972 qui est :

    echo `du -hsH "${CONFIG_backup_dir}"`

    donc j'ai déjà un h et un H je change en "du -hsh" ou "du -hs" ?

  13. Bonjour,
    Je trouve cet outil juste énorme et indispensable… à condition d’arriver à le faire fonctionner 😉
    Je suis développeur PHP MySQL et loue un serveur que je gère tant bien que mal avec mes (très très) maigres connaissances en Linux. Du coup, j’ai installé ce soft (v3.0) et tente de le configurer, mais rien n’y fait, j’ai quelques lignes d’erreur, et pas de backup 🙁
    Une petite aide serait la bienvenue…
    Merci par avance.

Laisser un commentaire