Tel pourrai être le leitmotiv de tout bon informaticien qui se respecte, en effet, personne n’est à l’abri d’un bug logiciel ou encore moins d’une défaillance physique et le constat est simple, plus son disque est gros et plus on a de chance de perdre des données…
Des sauvegardes, chaque jour, tu feras.
Tel pourrai être le leitmotiv de tout bon informaticien qui se respecte, en effet, personne n’est à l’abri d’un bug logiciel ou encore moins d’une défaillance physique et le constat est simple, plus son disque est gros et plus on a de chance de perdre des données…
An easy-to-use backup solution for making archives.
Voici la devise de Backup Manager, cet outils va vous permettre d’automatiser la sauvegarde de vos fichiers, bases mysql, bases subversion…très simplement.
Nous allons décrire ici l’installation sur Ubuntu ainsi que sa configuration qui est d’ailleurs d’une très grande simplicité !
Installation de Backup Manager:
C’est classique :
apt-get install backup-manager
A la fin de l’installation, un assistant se lance et vous permet de configurer des options par défaut.
Ou vous pouvez configurer à la main, comme indiqué dans l’étape suivante.
Configuration de Backup Manager
nano /etc/backup-manager.conf
Par défaut, les archives sont placées dans /var/archives, le répertoire doit être détenu par l’utilisateur root afin que personne d’autre ne puisse en consulter le contenu :
# Where to store the archives
export BM_REPOSITORY_ROOT="/var/archives"
Utilisateur et groupe à utiliser
# The repository will be readable/writable only by a specific
# user:group pair if BM_REPOSITORY_SECURE is set to true.
export BM_REPOSITORY_USER="root"
export BM_REPOSITORY_GROUP="root"
Les archives seront conservées 5 jours :
# Number of days we have to keep an archive (Time To Live)
export BM_ARCHIVE_TTL="5"
Méthode de compression à utiliser :
ajouter “mysql” si vous voulez sauver les bases de données.
export BM_ARCHIVE_METHOD="tarball mysql"
export BM_TARBALL_FILETYPE="tar.gz"
A la ligne suivante, ajoutez vos base de données séparer par un espace:
export BM_MYSQL_DATABASES="base1 base2 base3"
Les différents répertoires à sauvegarder : /etc contient les fichiers de configuration des services serveur, /home les données des sites et /var/lib/mysql les bases de données :
# Paths without spaces in their name:
export BM_TARBALL_DIRECTORIES="/etc /home /var/lib/mysql"
Nature des fichiers de sorties
export BM_TARBALL_FILETYPE="zip"
Ensuite, on renseigne l’utilisateur MySQL dédié aux sauvegardes :
# The user who is allowed to read every databases filled in BM_MYSQL_DATABASES
export BM_MYSQL_ADMINLOGIN="backupuser"
# its password
export BM_MYSQL_ADMINPASS="backuppwd"
Envoie d’un Email:
Allez maintenant au bas du fichier. Nous allons exécuter un script PHP à la fin de chaque sauvegarde qui nous avertira par email du bon déroulement de la sauvegarde :
# Enter here some shell script.
# It will be executed after the last action of backup-manager.
export BM_POST_BACKUP_COMMAND="/etc/backup-manager-email"
Sauvegardez le fichier et retournez dans le shell, la configuration est terminée.
Script d’envoie
nano /etc/backup-manager-email
Copiez ceci:
#!/usr/bin/php
<?php
$dest = 'contact@domain.tld';
$archives = '/home/backup';
$host = trim(file_get_contents('/etc/hostname'));
clearstatcache();
$dir = opendir($archives);
if($dir) {
while(false !== ($filename = readdir($dir))) {
if($filename[0]!='.' && preg_match('/'.date('Ymd').'/',$filename)) {
$thefile = $archives.'/'.$filename;
$size = exec("ls -l '".$thefile."' | awk '{print $5}'");
if($size > 0) {
$pagetext.= $filename." (".round($size/1000000000,2)." Go)\n";
} else {
$pagetext.= $filename." (? Go)\n";
}
$totalsize += $size;
}
}
$pagetext .= "\nTotal : ".round($totalsize/1000000000,2)." Go\n";
}
mail($dest,'['.$host.'] Sauvegardes réussies',$pagetext);
?>
N’oubliez pas de modifier l’adresse email au début du script PHP !
Il ne vous reste plus qu’à rendre le script exécutable avec :
chmod +x /etc/backup-manager-email
Création d’une tâche cron pour automatiser les sauvegardes:
Il ne nous reste plus qu’à automatiser tout cela, en utilisant CRON bien sûr.
Lancez la commande suivante, qui crée le fichier /etc/backup-manager.sh :
cat < /etc/backup-manager.sh && chmod 700 /etc/backup-manager.sh
Copiez ceci:
#!/bin/sh
test -x /usr/sbin/backup-manager || exit 0
/usr/sbin/backup-manager
EOF
chmod +x /etc/backup-manager.sh
Cron
Ensuite, éditez le crontab pour y ajouter votre ficher backup-manager.sh :
crontab -e
puis insérez la ligne :
0 5 * * * /etc/backup-manager.sh
Vos données seront alors sauvegardées chaque matin à 5h.
Bug avec la méthode Mysql
J’ai été confronté à un vilain méchant bug qui faisait que les sauvegardes des bases de données était bien la ….mais vides ! C’est gênant .
Pour résoudre ça il faut éditer le fichier .backup-manager_my.cnf dans le dossier /root et vérifier le mot de passe affiché, dans mon cas il n’était pas bon.
Si le fichier n'existe pas il faut le créer:
cd /root
nano .backup-manager_my.cnf
Copiez ceci et adaptez:
[client]
password="mot_de_passe"
Configurer le transfer par FTP:
Dans le fichier /etc/backup-manager.conf
export BM_UPLOAD_METHOD="ftp"
##############################################################
# The FTP method
#############################################################
# Use FTP secured transfers (FTP over TLS)
# User, password and data will be uploaded encrypted with SSL.
# Passive mode will be automaticaly activated
export BM_UPLOAD_FTP_SECURE="false"
# Do you want to use FTP passive mode?
# This is mandatory for NATed/firewalled environments
export BM_UPLOAD_FTP_PASSIVE="false"
# Timeout (in seconds) for FTP transfer
# This setting only has effect when using FTP transfer with
# secure mode disabled (BM_UPLOAD_FTP_SECURE to "false")
export BM_UPLOAD_FTP_TIMEOUT="3600"
# Test the FTP connection before starting archives upload.
# This will enable BM to try sending a 2MB test file before
# sending any archive
export BM_UPLOAD_FTP_TEST="false"
# the user to use for the FTP connections/transfers
export BM_UPLOAD_FTP_USER="username"
# the FTP user's password
export BM_UPLOAD_FTP_PASSWORD="password"
# FTP specific remote hosts
export BM_UPLOAD_FTP_HOSTS="the.ndd.fr"
# purge archives on remote hosts before uploading?
export BM_UPLOAD_FTP_PURGE="true"
# You can specify a time to live for archives uploaded with FTP
# This can let you use different ttl's locally and remotely
# By default, BM_ARCHIVE_TTL will be used.
export BM_UPLOAD_FTP_TTL="15"
# destination for FTP uploads (overrides BM_UPLOAD_DESTINATION)
export BM_UPLOAD_FTP_DESTINATION="/path"