Polyarchiv

Backup data from multiple local “sources” (organized in “collect points”) and send them to one or more “backup points”.

   collect point 1: /var/backups/local1             /---------------------------\
   data of dev.example.com              ________\__ |   backup point 1: git     |
/------------------------\             /        /   |   data of collect point 1 |
|     source 1: files    |---->-------/             \---------------------------/
|     source 2: mysql    |                          * http://mygit/backups/local1.git
|     source 3: mysql    |---->-------\
\------------------------/             \________\___ /-------------------------------\
                                                /    |   backup point 2: tar+curl    |
 collect point 2: : /var/backups/local2              |   data of collect point 1     |
 data of www.example.com                ________\___ |   data of collect point 2     |
/------------------------\             /        /    \-------------------------------/
|     source 1: files    |---->-------/             * ftp://server/backups/local1/2016-01-01.tar.gz
|     source 2: mysql    |                          * ftp://server/backups/local2/2016-01-01.tar.gz
\------------------------/

 collect point 3: : /var/backups/local3
 data of nothing.example.com
/-----------------------------\
|     source 1: files         |
|     source 2: postgresql    |  (local backup only)
|     source 3: mysql         |
\-----------------------------/

You should organize your data in collect points, each collect point having its own backup policy. Think collect points as projects (a website) or services (Ldap, Kerberos, …), but of course, you can organize your data as you want.

The complete backup operation is split into three steps for each collect point:

  1. collect all data from sources (like copying files or dumping databases) to the collect point,
  2. perform the local collect operation (maybe a local tar.gz archive, or just keep collected files as-this),
  3. optionally send all the collected data to one or more distant servers.

Some filters can be used (currently encrypting files or computing their md5 hashes) between the local collect and the remote send. Extra actions (“hooks”) can be called before or after a backup, or in case of success/error.