The Cella backup script is a Bash based wrapper around rsync, mysqldump and pg_dump.
Using these standard tools and a simple configuration file Cella provides a practical and simple method of backup.
- Archives MySQL or PostgreSQL Databases/Servers
- Push/Pull Backup Methods
- Store Off-site in Amazon S3
- Connect to DAV, EncFS, FTP, Samba and others
- mysql or mysql-client
- postgresql or postgresql-client
- Suggested: openssh
- Optional: Samba and
FUSE + ftpfs, s3fs, davfs, etc
Cella is just a PHP script, w/o any dependencies on other frameworks. Each of the Actions that Cella can perform depends on an outside tool. For example, to do an rdiff based backup the rdiff-package must be installed.
Installation is to simply download the script to the target system and make it executable.
user@host # mkdir -p /opt/edoceo/cella/ user@host # cd /opt/edoceo/cella/ user@host # wget edoceo.com/bin/cella.sh user@host # chmod 0755 cella.sh
Standard command format is
Here are some examples.
user@host # ./cella.sh
Show the Job List
user@host # ./cella.sh show
Run the Job List
user@host # ./cella.php pack
Run the Job List - debug/dry-run mode
user@host # ./cella.php -d pack
Show Archive List!
user@host # ./cella.php list
Do a few things (like in cron)
user@host # ./cella.php pack trim list
- [directory of cella.php]/cella.ini
- [current directory]/cella.ini
Cella scans the locations above for configuration files and loads each. Later files can/will over-write the data from the previous.
The files are plain ini style configurations. Section names are the titles of the backup job. The action, source and target parameters are required for all jobs.
# Cella Example Backup File # :mode=shellscript: # Cella defines variables and functions before calling this file # This file is run just as any other shell script # # Can set almost any vars you want here # We use special ones named like $_cella_* base="/mnt/Raid/Cella/" # Run the Functions # Typically they are like $command $source $target # # rsnap local->local rsnap_backup $base "/etc/" "etc/" # rsnap remote->local rsnap_backup $base "otherhost::/etc/" "otherhost/etc/" # rsnap local->remote rsnap_backup "/etc/" "otherhost::$base" # rsnap a remote Windows computer to Here mount -t cifs -o username=foo,password=bar //winhost/share /mnt/baz rsnap_backup /mnt/baz "$base/winhost/" umount /mnt/baz # # rsync local->local rsync_backup "/etc/" "$base/etc/" # rsync remote->local rsync_backup "otherhost:/etc/" "$base/otherhost/etc/" # rsync local->remote rsync_backup "/etc/" "otherhost:$base" # # Subversion Backup svn_backup /var/svn/repos/ $base/svn/ # # PostgreSQL Localhost, All Database (".") pgsql_backup "." $base/pg.dump/ "pg_user" "pg_pass" # Local Foo Database pgsql_backup "/foo" $base/pg.dump/ "pg_user" "pg_pass" # PostgreSQL Remote->Local, All Database (".") pgsql_backup "otherhost/." $base/pg.dump/ "pg_user" "pg_pass" # PostgreSQL Remote->Local, One Database pgsql_backup "otherhost/database" $base/pg.dump/ "pg_user" "pg_pass" # Run the Next Backup as Specific System User cella_runas "postgres" pgsql_backup "." $base/pg.dump/ "pg_user" "pg_pass" # Make a Tarball targz_backup "/etc" "$base/etc.tgz" # Backup LDAP slapd_backup "....." "$base/dump.ldif" # Show Outputs After? touch $base date > $base/timestamp.chk du -sh $base
- BackupPC a slightly larger solution in PERL
- Backup Ninja - another similar project