1

Hello,

Je cherche une solution de sauvegarde un peu générique, permettant de sauvegarder facilement plusieurs sources de données (dossiers de fichiers, base MySQL/PostgreSQL/SQLite ou encore LDAP) vers un ou plusieurs stockages (genre une archive .tar.gz par semaine et une copie différentielle tous les jours, ou un git local avec un push vers un git distant, ou du duplicity).
J'ai cherché rapidement et rien trouvé, je suis en train de réfléchir à faire un petit outil permettant de faire ça facilement (finalement, il ne s'agit que de faire un wrapper autour d'un fichier de conf pour appliquer les bonnes commandes mysql-dump, rsync ou git), mais si vous connaissez un outil déjà existant, ça me serait bien utile.
Je pourrais également tout faire à la main, mais c'est pénible de devoir se souvenir des syntaxes de chaque outil et de tout modifier si on change un serveur distant.
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

2

Bacula ?
Peace Unity Love et Having Fun!!!

3

Je n'ai essayé ni l'un ni l'autre, mais il y a aussi Bareos, fork de Bacula avec plus de fonctionnalités que la version libre de Bacula.
avatar
Mes news pour calculatrices TI: Ti-Gen
Mes projets PC pour calculatrices TI: TIGCC, CalcForge (CalcForgeLP, Emu-TIGCC)
Mes chans IRC: #tigcc et #inspired sur irc.freequest.net (UTF-8)

Liberté, Égalité, Fraternité

4

Je ne comprends pas trop ce que tu veux... de ce que tu décris un simple script faire l'affaire, non ?

5

PpHd (./4) :
Je ne comprends pas trop ce que tu veux... de ce que tu décris un simple script faire l'affaire, non ?
Sur le fond, oui, mais j'ai plusieurs services à sauvegarder et je vais devoir faire un script par service (chaque service pouvant éventuellement avoir une base SQL/LDAP ou des fichiers), à chaque fois faire le check pour remonter l'info dans la sup (pour savoir si la sauvegarde est assez récente), avec l'obligation de modifier tous les scripts si je bouge les serveurs de sauvegardes, etc. Du coup, un fichier de conf' me semble plus indiqué ^^
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

6

Bon, bah voilà, j'ai bien entamé le projet. Mais gros problème : va falloir que je trouve un nom sympa sad

Il se structure en dépôts locaux (chacun composé de plusieurs sources de données) et en dépôt distants, avec dans l'idée d'avoir plus ou moins un dépôt local par projet à sauvegarder.
Quand on lance le script, il scanne tous les fichiers de conf (un par dépôt local et un par dépôt distant), et exécute les bonnes commandes :
  • récupération des différentes sources (mysqldump, copie des fichiers, pg_dump, …)
  • sauvegarde locale éventuelle
  • envoi vers les différents dépôts distants
On peut préciser une fréquence maximale (du coup, ça ne fait rien si la dernière sauvegarde est assez récente), limiter les associations locaux-distants, afficher les commandes bash exécutées, les confirmer une à une ou les simuler. Accessoirement, il peut se comporter en check nagios pour être intégré à une sup’ assez facilement.
Un dépôt local peut être des fichiers standards ou un dépôt git. Pour les distants, il y a git, .tar.gz envoyé par cURL, duplicity ou rsync.

Par exemple, avec en local : [global] engine=GitRepository local_path=/tmp/local frequency=daily [source_1] engine=PostgresSQL host=localhost user=test password=testtest database=testdb destination_path=./postgres.sql [source_2] engine=MySQL user=test password=testtest database=testdb destination_path=./mysql.sql [source_3] engine=RSync source_path=/tmp/source/files destination_path=./filesEt en distant :[global] engine=TarArchive remote_url=file:///tmp/remote/archives/on peut avoir
python run.py backup --show-commands --force --dry PGPASSWORD=testtest pg_dump --username=test --host=localhost --port=5432 testdb > /tmp/local/./postgres.sql mysqldump --user=test --password=testtest --host=localhost --port=3306 testdb > /tmp/local/./mysql.sql rsync -a --delete -S /tmp/source/files/ /tmp/local/./files/ echo '2016-05-05T13:56:32' > /tmp/local/.last-backup cd /tmp/local git init git add . git commit -am 'Backup 2016/05/05 13:56' # register this backup state cd /tmp/local tar -cjf /tmp/local/archive-2016-05-05_13-56.tar.bz2 .last-backup files mysql.sql postgres.sql cp /tmp/local/archive-2016-05-05_13-56.tar.bz2 /tmp/remote/archives/
Faut encore faire l'opération de restauration des backups, et surtout faire les tests pour chaque type d'opération sad
avatar
<<< Kernel Extremis©®™ >>> et Inventeur de la différence administratif/judiciaire ! (©Yoshi Noir)

<Vertyos> un poil plus mais elle suce bien quand même la mienne ^^
<Sabrina`> tinkiete flan c juste qu'ils sont jaloux que je te trouve aussi appétissant

7

Pas mal smile

Du coup ça mérite d'être forké côté projets, non ?

Plusieurs questions, parce que je serais bien utilisateur d'un système pareil : dans le fichier de configuration, "global" ça veut dire "paramètres par défaut qu'on peut overrider dans la définition des sources" ? Si oui, je trouve dommage d'avoir un conflit potentiel entre cette définition et la définition des sources (c'est trompeur, et puis impossible d'avoir une source qui s'appelle "global" j'imagine), mais ça ne vaut peut-être pas le coup de changer. Par contre si j'ai bien compris la définition, je me serais attendu à un nom genre "default" plutôt que "global" dont le sens est plus ambigu.

Pour que ça fonctionne il faut au moins un fichier local et au moins un fichier distant ? Comment est-ce qu'il choisit lesquels il utilise ? (je ne vois pas de référence à l'un ou à l'autre dans ton exemple) Il faut les placer où ?

La fréquence, il y a moyen de mettre des choses plus précises que "daily" (ou "hourly", etc. j'imagine) ? Par exemple toutes les 12h ?

Ah et le PascalCase pour le nom des moteurs, c'est une faute de goût presque impardonnable grin (sérieusement, "RSync" et "GitRepository" quoi !)

[edit] Encore une : le fichier distant semble porter deux notions différentes, celle de format de fichier pour la sauvegarde (avec ce fabuleux "TarArchive" qui pourrait s'appeler "tar" tongue) mais également celle de type de transport ("http://file:///" qui pourrait j'imagine être aussi "http://ftp://", "http://ssh://", "http://webdav://" ou autre) ; comment ça marche ?
avatar
All right. Keep doing whatever it is you think you're doing.
------------------------------------------
Besoin d'aide sur le site ? Essayez par ici :)

8

Ce sujet a été coupé en 2 afin de séparer la discussion principale des posts suivants : ./6, ./7. Pour vous rendre sur le nouveau sujet, suivez ce lien.
avatar
Ben, bouh, quoi :D