Outils pour utilisateurs

Outils du site


Panneau latéral

linux:backup-manager (lu 39495 fois)

Ceci est une ancienne révision du document !


Backup Manager

Installation

apt-get install backup-manager

Configuration

Dès que j’aurai un peu de temps, je vais détaillé ce programme de backup qui est assez simple à mettre en place :)

Erreur

Il n’est pas rare de voir dans nos log ceci

backup-manager[4097]: warning * Creating a default MySQL client configuration file: /root/.backup-manager_my.cnf

Ce n’est pas grave mais si comme moi vous ne trouvez ça pas très propre, il suffit de changer un mot dans un fichier.

vi /usr/share/backup-manager/backup-methods.sh

Allez à la ligne 909 et changez

warning "Creating a default MySQL client configuration file: \$mysql_conffile"

par

info "Creating a default MySQL client configuration file: \$mysql_conffile"

Le message n’apparaîtra que si vous configuré le niveau de log sur info dans /etc/backup-manager

export BM_LOGGER_LEVEL="info"

Script de control

backup-manager-post.php
#!/usr/bin/php
<?php
/**
 * backup-manager post script :
 *  - permet de vérifier l'intégrité des fichiers uploadés sur le serveur de sauvegarde
 *    (comparaison des chaines md5)
 *  - envoie d'un mail récapitulatif contenant la liste des fichiers et la taille totale utilisée
 *
 * @references script inspiré de Alsacréation : http://www.alsacreations.com/tuto/lire/618-Sauvegarde-backup-manager.html
 * @autor Franek <franek at chicour dot net>
 */
 
/**
 * Configuration
 */
# email des destinataires
$email_dest = array(dest@domain.com');
# répertoire local de stockage des fichiers de sauvegarde
$archives_dir = '/var/archives';
# adresse du serveur FTP
$ftp_server = '';
# identifiant du serveur FTP
$ftp_user_name = '';
# mot de passe du serveur FTP
$ftp_user_pass = '';
 
/**
 * Ne pas modifier - ci-dessous
 */
 
/**
 *
 * Envoi d'un mail
 *
 * @param array $email_dest
 * @param string $subject
 * @param string $content
 */
function sendMail($email_dest, $subject, $content)
{
    foreach($email_dest as $dest)
    {
        mail($dest, $subject, $content);
    }
}
 
/**
 * Récupère la liste des fichiers présents en local pour une date donnée
 * @param $archives_dir string répertoire de stockage des fichiers
 * @param $filtre_date string date à filtrer (format YYYYMMDD)
 * @return array
 */
function getLocalFiles($archives_dir, $filtre_date)
{
     clearstatcache();
 
     $files = array();
     foreach (new DirectoryIterator($archives_dir) as $file_info)
     {
         if($file_info->isDot() || !preg_match('/'.date('Ymd').'/',$file_info->getFileName()))
         {
          continue;
            }
         $file['name'] = $file_info->getFilename();
         // on utilise cette commande car filesize ne gère pas les fichiers de plus de 2Go.
            $file['size'] = exec("stat -c %s '".$file_info->getPathname()."'");
            $files[] = $file;
     }	
     sort($files);
     return $files;
}
 
/**
 *
 * Compare le hachage md5 des fichiers locaux avec les fichiers envoyés
 * sur le serveur FTP
 * Si le hachage est identique, renvoie true.
 * Sinon, renvoie false
 *
 * @param string $md5_file
 * @param string $ftp_server
 * @param string $ftp_user_name
 * @param string $ftp_user_pass
 * @param string $filtre_date
 * @return bool
 */
function verifMd5Ftp($md5_file, $ftp_server, $ftp_user_name, $ftp_user_pass, $filtre_date)
{
     $handle = fopen($md5_file, "r");
     if ($handle !== false)
        {
          while (!feof($handle)) 
          {
             	$buffer = fgets($handle, 4096);
             	list($md5, $filename) = explode("  ", $buffer);
               // pour supprimer /n
               $filename = trim($filename);
               if (!empty($filename))
               {
                    if ($md5 !== getMd5OverFtp($filename, $ftp_server, $ftp_user_name, $ftp_user_pass))
                    {
                         fclose($handle);
                         return false;
                    }
               }
          }
     fclose($handle);
     }
        else
        {
            return false;
        }
     return true;
}
 
/**
 *
 * Renvoie le hachage md5 d'un fichier présent sur le serveur FTP de sauvegarde
 *
 * @param string $file fichier dont le md5 doit être calculé
 * @param string $ftp_server adresse du serveur FTP de sauvegarde
 * @param string $ftp_user_name identifiant de connexion du serveur FTP
 * @param string $ftp_user_pass mot de passe de connexion du serveur FTP
 * @return string
 */
function getMd5OverFtp($file, $ftp_server, $ftp_user_name, $ftp_user_pass)
{
     $connect_string  = 'ftp://';
     $connect_string .= $ftp_user_name;
     if (!empty($ftp_user_pass))
     {
          $connect_string .= ':'.$ftp_user_pass;
     }
     $connect_string .= '@'.$ftp_server;
     $connect_string .= '/'.$file;
     return md5_file($connect_string);
}
 
 
/**
 * Renvoie la taille du fichier en un format compréhensif
 *
 * source : http://fr.php.net/manual/en/function.filesize.php (nak5ive at DONT-SPAM-ME dot gmail dot com)
 *
 * @param int $bytes
 * @param int $precision
 * @return string
 */
function formatBytes($bytes, $precision = 2)
{
    $units = array('B', 'KB', 'MB', 'GB', 'TB');
 
    $bytes = max($bytes, 0);
    $pow = floor(($bytes ? log($bytes) : 0) / log(1024));
    $pow = min($pow, count($units) - 1);
 
    $bytes /= pow(1024, $pow);
 
    return round($bytes, $precision) . ' ' . $units[$pow];
}
 
 
/**
 * début du script
 */
$date = date('Ymd');
$host = trim(file_get_contents('/etc/hostname'));
# fichier contenant les chaines md5 de tous les fichiers sauvegardés
$md5_file = $archives_dir.'/'.$host.'-'.$date.'.md5';
$check_md5_ftp = false;
 
clearstatcache();
 
$local_files = getLocalFiles($archives_dir, $date);
if(empty($local_files))
{
     $output .= ' - Fichiers non présents en local (attention : cela peut venir d\'un problème de droit).'."\n";
}
else
{
     $output .= ' - Fichiers présents en local :'."\n\n";
     $total_size = 0;
        // affichage de la liste des fichiers avec leur taille et un total global
     foreach($local_files as $file)
     {
          $output .= '   # '.$file['name'];
          $output .= ' ('.formatBytes($file['size']).')';
          $output .= "\n";
          $total_size += $file['size'];
     }
     $output .= "\n".'   # TOTAL : '.formatBytes($total_size)."\n\n";
 
        // lance la vérification md5 des fichiers uploadés sur le serveur FTP
     $check_md5_ftp = verifMd5Ftp($md5_file, $ftp_server, $ftp_user_name, $ftp_user_pass, $filtre_date);
     if ($check_md5_ftp === false)
     {
          $output .= ' - problème d\'intégrité dans les fichiers transmis sur le serveur FTP'."\n";
     }
     else
     {
          $output .= ' - intégrité des fichiers sur le serveur FTP vérifiés.'."\n";
     }
}
 
// construction du sujet du mail
$subject = '['.$host.']';
if ($check_md5_ftp === true)
{
     $subject .= ' backup ok';
}
else
{
     $subject .= ' backup ko';
}
 
sendMail($email_dest, $subject, $output);
?>

— source : http://franek.chicour.net/post/2009/12/29/Am%C3%A9lioration-du-post-script-de-backup-manager

linux/backup-manager.1379595953.txt.gz · Dernière modification: 19-09-2013 15:05 de edmc73