Accueil > Backup, Mysql, Script, Ubuntu > Sauvegarde de donnée avec backup-manager

Sauvegarde de donnée avec backup-manager

La perte de données est une chose que les administrateurs de serveur redoute le plus. Il y a quelques semaines un des 3 disques dur monter en RAID 5 est tomber en panne sur l’un des serveurs que je m’occupe. Le serveur contenait 3 disques dur monter en RAID 5.
Ceux qui ont eu la désagréable surprise d’avoir un disque dur HS savent bien sûr à quel point les sauvegardes sont très importantes. Je n’en avais pas fait à l’époque. Grosse erreur.

Après avoir changer le disque hors service, j’ai tenter de reconstruire le RAID sans succès malheureusement. Certaines donnée étaient corrompue. Même un fsck n’a pas réussi à corriger le problème. Le serveur ne démarrait plus. J’ai passer des heures / jours à essayer de réparé via le mode rescue sans succès. Il faut dire que la reconstruction d’un RAID 5 de 3×1 To prend un temps fou. Pas loin de 5 heures.

Pour preuve un extrait du /proc/mdstat en cours de reconstruction :

~# cat /proc/mdstat
Personalities : [linear] [multipath] [raid0] [raid1] [raid6] [raid5] [raid4] [raid10]
md0 : active raid1 sdb1[3] sda1[0] sdc1[2]
96320 blocks [3/2] [U_U]
resync=DELAYED

md1 : active raid5 sda2[0] sdb2[3] sdc2[2]
1952250752 blocks level 5, 64k chunk, algorithm 2 [3/2] [U_U]
[===========>.........] recovery = 57.9% (565649152/976125376) finish=128.8min speed=53111K/sec

unused devices:

Pour que cette malheureuse mésaventure ne se reproduise plus j’ai installer un système de sauvegarde qui est backup-manager. Voila le site officiel http://www.backup-manager.org/

Présentation :

Backup-manager s’étoffe de versions en versions dans cette version il permet dès à présent :

  • de sauvegarder vos données sous forme d’archive tar/dar (à intervalle régulier ou sur demande)
  • d’effacer les vieilles sauvegardes.
  • de compresser les sauvegardes, les découper en plusieurs fichiers de taille déterminée.
  • de ne sauvegarder que les différences entre les sauvegardes (sauvegarde incrémentale)
  • de graver automatiquement les sauvegardes sur CD/DVD
  • d’exporter les sauvegardes sur une machine distante
  • d’exécuter une commande avant et après la sauvegarde
  • de créer plusieurs méthodes de sauvegarde grâce à divers outils de sauvegardes
  • etc…

Installation :

Backup-manager est disponible dans le dépôt universe de Ubuntu donc pour l’installer un simple :

sudo aptitude install backup-manager

Lors de l’installation, on vous posera quelques questions sur le paramétrage.
Vous pouvez aussi installer backup-manager-doc pour pouvoir consulter la documentation officielle dans /usr/share/doc/backup-manager-doc/

Configuration :

La configuration de backup-manager se fait via le fichier :

/etc/backup-manager.conf

Pour bien configurer backup-manager voici plusieurs wiki, documentation.

Wiki backup-manager
Documentation Ubuntu-fr
Documentation Fedora
Documentation dedibox sur backup-manager

Voici ma configuration (sans les mots de passe bien sûr, et sans les commentaires du fichier de conf)
Pour supprimer les commentaires du fichier et les espaces vide voici une commande utile.

cat /etc/backup-manager.conf | grep -v ^$ | grep -v ^#

Voici ma configuration de backup-manager, avec leurs significations.

export BM_REPOSITORY_ROOT="/backup/files"

Répertoire local où toutes vos archives seront stockés.

 export BM_TEMP_DIR="/tmp"

Répertoire local temporaire utilisé par backup-manager lors du backup.

 export BM_REPOSITORY_SECURE="true"

Option qui permet de sécurisé le répertoire de backup à un utilisateur avec les permissions qui suis.

 export BM_REPOSITORY_USER="root"

Utilisateur à qui appartiendra le répertoire. (ici root pour éviter que d’autres utilisateurs y viennent fouiller)

 export BM_REPOSITORY_GROUP="root"

Groupe à qui appartiendra le répertoire. (ici root)

 export BM_REPOSITORY_CHMOD="755"

Permission chmod du répertoire.
Pour plus d’infos man chmod.

 export BM_ARCHIVE_CHMOD="644"

Permission chmod des archives qui seront généré.

 export BM_ARCHIVE_TTL="3"

Durée de vie (Time To Live) d’une archive en jours. Ici 3 jours

 export BM_REPOSITORY_RECURSIVEPURGE="true"

Possibilité de purger (supprimer) récursivement l’ensemble du contenu de BM_REPOSITORY_ROOT lorsqu’une archive expire.

 export BM_ARCHIVE_PURGEDUPS="true"

Si deux archives sont identiques, (aucune modifications de fichiers) backup-manager peut créer un lien symbolique au lieu de recréer une autre archive. (gain de place)

 export BM_ARCHIVE_PREFIX="$HOSTNAME"

Préfixe de l’archive. (ici se sera le hostname de la machine)
Vous pouvez mettre se que vous voulez comme préfixe.

 export BM_ARCHIVE_STRICTPURGE="true"

Active la purge stricte des archives. (si vous faites un backup de plusieurs machines dans le même répertoire, seul les archives avec le bon préfixe seront purger)

 export BM_ARCHIVE_NICE_LEVEL="10"

Priorité du processus de backup. (-20 est égal à la plus haute priorité possible, 20 la plus faible)
man nice ou renice pour plus d’infos.

 export BM_ARCHIVE_METHOD="tarball"

Méthode de sauvegarde de backup-manager.
Les méthodes disponible sont :

  • tarball
  • tarball-incremental
  • mysql
  • svn
  • pipe
  • none

Vous pouvez combiné plusieurs méthodes de sauvegarde. Exemple : tarball et mysql

 export BM_ENCRYPTION_METHOD="false"

Option qui permet de crypter les archives. Uniquement possible via les archives tar, tar.gz, tar.bz2

 export BM_ENCRYPTION_RECIPIENT=""

ID de la clef GPG pour le cryptage des archives.

 export BM_TARBALL_NAMEFORMAT="long"

Indique comment les archives seront nommée. (long où short)
Exemple :

  • long = hostname-repertoire-fichier.tar.gz
  • short = fichier.tar.gz
 export BM_TARBALL_FILETYPE="tar.gz"

Type d’archives pour le backup.
Les format disponibles sont :

  • tar
  • tar.gz
  • tar.bz2
  • tar.lz
  • dar
  • zip
 export BM_TARBALL_OVER_SSH="false"

Permet de construire des archives via SSH à distance.
Vous devrez remplir les variables BM_UPLOAD_SSH pour utiliser cette option
(BM_UPLOAD_SSH_HOSTS, BM_UPLOAD_SSH_USER, BM_UPLOAD_SSH_KEY).
Si cette option est à true, les archives seront enregistrées localement (dans le
BM_REPOSITORY_ROOT mais elle seront construite par l’hôte distant).
Ainsi, BM_TARBALL_DIRECTORIES seront utilisés pour des répertoires de sauvegarde distant.
Ces archives seront préfixés par le nom de l’hôte distant.

 export BM_TARBALL_DUMPSYMLINKS="false"

Permet d’archiver les fichiers pointés par les liens symboliques.
Entrez true ou false (true peut conduire à des archives énorme, attention donc à cette option).

 export BM_TARBALL_DIRECTORIES="/etc /home/site1 /home/site2 /home/site3"

Répertoires que vous voulez sauvegarder dans des archives (séparé par des espaces)
Si vous avez des répertoires avec des espaces à sauvegarder, il est recommandé d’utiliser les options ci-dessous plutôt que BM_TARBALL_DIRECTORIES

NOTE: Le paquet Debian mettra uniquement à jour BM_TARBALL_DIRECTORIES. BM_TARBALL_TARGETS n’est pas utiliser d’après les indications fournis dans le fichier de conf.

 BM_TARBALL_TARGETS[0]="/etc"
 BM_TARBALL_TARGETS[1]="/boot"
 BM_TARBALL_TARGETS[2]="/home/user/1er backup"
 export BM_TARBALL_BLACKLIST="/var/run /var/log /usr/bin /usr/sbin *.mp3 *.avi"

Répertoires où fichiers que vous voulez exclure dans l’archive (séparé par des espaces)
Les jokers sont possible (*)

 export BM_TARBALL_SLICESIZE="1000M"

Taille maximum d’une archive (uniquement possible avec l’archive .dar si vous souhaitez découper les sauvegardes)

 export BM_TARBALL_EXTRA_OPTIONS=""

Options supplémentaires ajouter à la commande de génération de l’archive.

 export BM_TARBALLINC_MASTERDATETYPE="weekly"

Fréquence de lancement du backup (utile seulement si l’on utilise pas le cron pour lancer backup-manager).
Options possible : weeklymonthly
Par défaut backup-manager install un fichier dans /etc/cron.daily/ pour qu’il soit lancer chaque jours.
Ceci est inutile si vous créer une tâche cron (voir fin de l’article).

 export BM_TARBALLINC_MASTERDATEVALUE="1"

Fréquence de lancement du backup en jours (0 = dimanche, 6 = samedi)

  • si weekly : mettre un nombre de 0 à 6 (dimanche -> samedi)
  • si monthly : mettre un nombre de 1 à 31 (1er -> 31)

MYSQL :

 export BM_MYSQL_DATABASES="__ALL__"

Base mysql à sauvegarder (__ALL__ permet de sauvegarder toutes les bases de données en une seule archive), sinon indiquer les bases à sauvegarder séparé par un espaces.

 export BM_MYSQL_SAFEDUMPS="true"

Extrait du fichier de conf :
La meilleure façon de produire un dump MySQL est fait en utilisant l’option « - opt » de mysqldump. Ceci fait un dump directement utilisable avec MySQL (ajoute les DROP TABLE), verrouille les tables au cours du dump et d’autres choses.
Ceci est recommandé pour des sauvegardes sans danger, mais a besoin d’un utilisateur privilégié (pour les autorisations de lock des tâbles).

 export BM_MYSQL_ADMINLOGIN="root"

Utilisateurs mysql qui se connectera pour faire le dump (ici root)

 export BM_MYSQL_ADMINPASS=""

Mot de passe mysql de l’utilisateur.

 export BM_MYSQL_HOST="localhost"

L’adresse où se trouve le serveur mysql à sauvegarder (ici localhost)

 export BM_MYSQL_PORT="3306"

Le port utiliser par le serveur mysql (par défaut c’est 3306, sauf si vous l’avez modifier)

 export BM_MYSQL_FILETYPE="bzip2"

Format de compression de l’archive pour les dump mysql. (gzip, bzip2 où laissez vide pour avoir un fichier sql brut.)

SVN :

 export BM_SVN_REPOSITORIES=""

Chemin d’accès au dépôt SVN.

 export BM_SVN_COMPRESSWITH="gzip"

Format de compression de l’archive pour les backups via SVN.
Compresseur possible : bzip2 et gzip laissez vide pour avoir le xml brut.

Méthode PIPE :

La méthode PIPE qui suis vous permettra de « créer » vos propres commandes, le résultat de votre commande sera le contenu de l’archive générée.

Options de la méthode pipe :

export BM_PIPE_COMMAND
export BM_PIPE_NAME
export BM_PIPE_FILETYPE
export BM_PIPE_COMPRESS

Exemple :

BM_PIPE_COMMAND[0]="ssh host -c \"mysqldump -ufoo -pbar base\""

Nous avons ici comme exemple l’exécution d’un dump mysql distant par SSH.

BM_PIPE_NAME[0]="mabase"

Le nom de l’archive à générer.

BM_PIPE_FILETYPE[0]="sql"

Le type de données renvoyé par la commande (txt, sql, dump…).

BM_PIPE_COMPRESS[0]="gzip"

La compression à appliquer (gzip, bzip2, laissez vide pour aucune).

Autre exemple :

BM_PIPE_COMMAND[0]="ssh host -c \"tar -c -z /home/user\""
BM_PIPE_NAME[0]="host.home.user"
BM_PIPE_FILETYPE[0]="tar.gz"
BM_PIPE_COMPRESS[0]=""

Nous avons ici comme exemple l’exécution de tar distant par SSH, qui va créer une archive de /home/user.

Méthode d’upload :

 export BM_UPLOAD_METHOD="ftp"

Un backup, c’est bien, mais l’uploader vers un autre serveur c’est mieux. Voici les différentes méthodes d’upload disponible.

  • scp
  • ssh-gpg
  • ftp
  • rsync
  • s3
  • none
 export BM_UPLOAD_HOSTS="backup.domaine.com"

Adresse où uploader les sauvegardes.

 export BM_UPLOAD_DESTINATION="/backup"

Répertoire de destination de l’upload.

Méthode d’upload SSH :

 export BM_UPLOAD_SSH_USER=""

Utilisateur pour l’upload si méthode via ssh.

 export BM_UPLOAD_SSH_KEY=""

Clef privée ssh pour se connecter.

 export BM_UPLOAD_SSH_HOSTS=""

Adresse où se trouve le serveur distant ssh.

 export BM_UPLOAD_SSH_PORT=""

Le port ssh du serveur distant.

 export BM_UPLOAD_SSH_DESTINATION=""

Répertoire de destination ssh.

 export BM_UPLOAD_SSH_PURGE="true"

Permet d’effacer les archives déjà présentent sur le serveur avant l’envoi.

 export BM_UPLOAD_SSH_TTL=""

Si l’option précédente (BM_UPLOAD_SSH_PURGE) est à true, spécifiez ici la durée de vie des archives (par défaut, c’est le valeur de l’option BM_ARCHIVE_TTL)
Durée de vie (Time To Live) d’une archive en jours.

 export BM_UPLOAD_SSHGPG_RECIPIENT=""

La clef publique GPG à utiliser pour le chiffrement.

Méthode d’upload FTP :

 export BM_UPLOAD_FTP_SECURE="false"

Utilise le transfert FTP sécurisé (FTP over TLS) Utilisateur, mot de passe et les données seront cryptées avec SSL.
Le mode passif sera automatiquement activé.

 export BM_UPLOAD_FTP_PASSIVE="true"

Mode passif du transfert ftp.

 export BM_UPLOAD_FTP_USER="mon_login_ftp"

Login du serveur ftp.

 export BM_UPLOAD_FTP_PASSWORD="mon_pass_ftp"

Mot de passe du serveur ftp.

 export BM_UPLOAD_FTP_HOSTS="dedibackup.dedibox.fr"

Adresse du serveur ftp distant. (Ici dedibackup)

 export BM_UPLOAD_FTP_PURGE="true"

Permet de purger les archives qui se trouvent sur le serveur ftp.

 export BM_UPLOAD_FTP_TTL=""

Durée de vie (Time To Live) des archives sur le serveur ftp en jours.

 export BM_UPLOAD_FTP_DESTINATION="/files"

Répertoire de destination où sera envoyer les archives via ftp.

Méthode d’upload S3 :

S3 = (Simple Storage Service) est un service payant proposé par Amazon qui vous permet de disposer d’un espace de stockage.

export BM_UPLOAD_S3_DESTINATION=""
export BM_UPLOAD_S3_ACCESS_KEY=""
export BM_UPLOAD_S3_SECRET_KEY=""
export BM_UPLOAD_S3_PURGE="false"

Méthode RSYNC :

 export BM_UPLOAD_RSYNC_DIRECTORIES="/home/site1 /home/site2 /etc"

Répertoires à inclure dans le backup via rsync séparé par des espaces.

 export BM_UPLOAD_RSYNC_DESTINATION="/backup/dest"

Destination de la sauvegarde sur le serveur distant.

 export BM_UPLOAD_RSYNC_HOSTS="rsync.domaine.com"

Adresse du serveur rsync distant.

 export BM_UPLOAD_RSYNC_DUMPSYMLINKS="false"

Sauvegarde où non les liens symboliques.

Gravure sur un CD / DVD :

backup-manager vous permet aussi de graver sur différents supports comme les CDR, CDRW, DVD, et DVDRW (support des DVDRW pour les versions >= 0.7.2).

 export BM_BURNING_METHOD="CDRW"

Le type de support sur lequel vous souhaitez graver vos archives.

 export BM_BURNING_CHKMD5="false"

Cette option vous permet d’être sûr que vos données ont été gravées correctement sans corruptions si elle est à true.

 export BM_BURNING_DEVICE="/dev/cdrom"

Le « device » du graveur.

 export BM_BURNING_DEVFORCED=""

Vous pouvez forcer cdrecord à utiliser un device spécifique.
Indiquer le chemin complet vers le périphérique à utiliser, voir par exemple :

BM_BURNING_DEVFORCED = « /dev/cdrom »

Si none, la valeur par défaut de cdrecord sera utilisé.

 export BM_BURNING_ISO_FLAGS="-R -J"

Par défaut backup-manager prendra médias Joliet (en utilisant les commutateurs mkisofs : « -R-J »). Vous pouvez changer cela si vous souhaitez utiliser des images non-disc Joliet.
Changer cette valeur uniquement si vous savez ce que vous faites.
Reportez-vous à mkisofs (8) pour plus de détails.

 export BM_BURNING_MAXSIZE="700"

Taille maximum disponible sur le support de gravure.

 export BM_LOGGER="true"

Si à true, permet d’envoyer la sortie d’état (erreurs, info …) dans syslog.

 export BM_LOGGER_FACILITY="cron"

Facilité syslog (je n’ai pas trouver d’autre traduction). En gros celà permet de choisir dans quel fichier sera loggé les erreurs via syslog etc…

  • Si user alors les log seront enregistrer dans /var/log/user.log
  • Si cron alors les log seront enregistrer dans /var/log/cron.log

Voir dans le fichier /etc/syslog.conf pour plus de détails.

 export BM_PRE_BACKUP_COMMAND="bash /backup/dpkg.sh"

Commande qui sera lancer avant la sauvegarde.
Il peut être intéressant d’exécuter un script qui :

  • copie certains fichiers de configuration (fstab, xorg.conf, source.list, menu.lst,…) dans le dossier à sauvegarder
  • génère une liste des paquets installés sur la machine
  • lance un script bash qui créer un backup mysql
  • etc…
 export BM_POST_BACKUP_COMMAND=""

Commande qui sera lancer après la sauvegarde.
Ici on peu créer un script qui envoie un email pour avertir que la sauvegarde c’est bien passer par exemple.

Dans mon exemple la ligne

export BM_PRE_BACKUP_COMMAND="bash /backup/dpkg.sh"

me permet de lancer un script bash avant le lancement de backup-manager, qui enregistre la liste des paquets installer sur la machine dans un fichier texte.
Ceci me permet de ré-installer les paquets à l’identique via un

dpkg --set-selections < /home/site1/mon_fichier.txt

puis un

sudo apt-get dselect-upgrade

réinstallera les paquets de la selection en un rien de temps.

Voici le contenu de /backup/dpkg.sh pour ceux qui souhaite l’utiliser

#!/bin/bash
HEURE=$(date +%d"-"%m"-"%Y"_"%H"h"%M)
dpkg --get-selections >> /home/site1/dpkg--get-selections_$HEURE.txt

Pour le lancement de backup-manager j’utilise un script bash que je place dans /etc/backup-manager.sh

Voici le script.

#!/bin/sh
 test -x /usr/sbin/backup-manager || exit 0
 /usr/sbin/backup-manager --verbose

J’ai ajouter l’option verbose afin que backup-manager soit plus parlant lors d’une sauvegarde.

Voici ma tâche cron qui se lance tout les 5 jours à 4h00 :

SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
 
00 4 */5 * *  root if [ -x /etc/backup-manager.sh ]; then /etc/backup-manager.sh >> /backup/cron_backup-manager.log 2>&1; fi

Comme vous pouvez le voir j’enregistre dans /backup/cron_backup-manager.log les log de mon cron backup-manager pour vérifier que tout c’est bien passer lors du backup.

Pour être certain que backup-manager fera son job, vous pouvez le lancer en ligne de commande.

sudo backup-manager

Pour voir les options disponible :

sudo backup-manager -h

Vous constaterez que Backup-manager est très puissant et permet le backup de base MYSQL, mais personnellement j’utilise un script bash qui fera l’objet d’un prochain article.

En cas de problèmes, où si vous voyez une erreur, vous pouvez me joindre via le formulaire de contact où via les commentaires.

Je vous recommande aussi la lecture des sujets suivants:

Catégories:Backup, Mysql, Script, Ubuntu
  1. Pas encore de commentaire
  1. Pas encore de trackbacks