Bon, bah voilà, j'ai bien entamé le projet. Mais gros problème : va falloir que je trouve un nom sympa
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=./files
Et 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