Be able to backup your database(s) and upload it to the cloud (Dropbox, Amazon S3, GoogleDrive, etc.)
Be able to backup your database(s) and upload it to the cloud (Dropbox, Amazon S3, GoogleDrive, etc.)
This bundle helps you to backup your databases and upload it to the cloud with only one Symfony2 command.
You can :
Databases supported :
Cloud services supported :
But also :
are supported :-)
Compressors supported :
Splitters supported:
Download CloudBackupBundle and its dependencies to the vendor directory. You can use Composer for the automated process:
$ php composer.phar require dizda/cloud-backup-bundleComposer will install the bundle to vendor/dizda directory.
// app/AppKernel.php
public function registerBundles()
{
$bundles = array(
// ...
new Dizda\CloudBackupBundle\DizdaCloudBackupBundle(),
// ...
);
}Here is the default configuration for the bundle:
…It is recommended to keep real values for logins and passwords in your parameters.yml file, e.g.:
…# app/config/parameters.yml
# ...
database_driver: pdo_mysql
database_host: localhost
database_port: null
database_name: myDatabase
database_user: myLogin
database_password: myDatabasePassword
# ...
dizda_cloud_dropbox_token: myDropboxUser
dizda_cloud_mongodb_user: mongodbUser
dizda_cloud_mongodb_password: mongodbPass
dizda_cloud_archive_password: ArchivePassword
# ...The bundle adds one command to symfony console: app/console dizda:backup:start which you execute periodically as a cron job.
For example the following cron command dumps your database every days at 6am on a server :
# m h dom mon dow command
0 6 * * * cd /var/www/yourproject && php app/console --env=prod dizda:backup:start > /dev/null 2>&1Info : To edit crontab for the user www-data (to prevent permissions error) :
$ crontab -u www-data -eor simply
$ php app/console --env=prod dizda:backup:startIn addition, using -F or --folder option the folders also will be added to the backup.
Obviously, if some problems occurs during the backup process, you can configure monolog to send you emails.
When working locally or on a staging server, you can configure the bundle to enable restoring. Set restore: true and
the following command is available:
$ php app/console dizda:backup:restore --forceNote! Not all processors, clients and databases supports restoring. Backupped files are not restored.
tar and zip archivers are produce the same size of compressed file, but tar compresses faster.
7z archiver is very slow, but has double effectiveness.
tar archiver do not support encryption, other archivers support.
Note Your system may not have the
zipand7zarchivers installed. Buttaris installed in common case.
Guide to choice:
tar.zip.7z.Note Any archiver good compress text files (and better compress structured texts e.g. sql, css, html/xml). But binary files (images, audio, video) will not be well compressed. If you have small database dump and big binary data, the best choice will be
tarorzip.
Comparison of archivers
Uncompressed archive contents sql dump of 42.2M size. This table represents effectiveness of archivers. Third column contents compressed archive file and percent of compression (low is better). Fourth column contents compression time and its ratio (to first line) (low is better).
| archiver | compression | archive size | execution time |
|---|---|---|---|
| tar | default (6) | 8.78M (20.8%) | 4.44s (1.00x) |
| tar | best (9) | 8.45M (20.0%) | 9.89s (2.23x) |
| zip | default (6) | 8.78M (20.8%) | 5.39s (1.21x) |
| zip | best (9) | 8.45M (20.0%) | 11.03s (2.48x) |
| 7z | default (5) | 4.42M (10.5%) | 31.06s (7.00x) |
| 7z | best (9) | 4.24M (10.0%) | 38.88s (8.76x) |
If you are using capifony for deployment you can grab the sample task for easier backups.
Add the following task in your deploy.rb file
namespace :symfony do
namespace :dizda do
namespace :backup do
desc "Upload a backup of your database to cloud service's"
task :start do
run "#{try_sudo} sh -c 'cd #{current_release} && #{php_bin} #{symfony_console} dizda:backup:start #{console_options}'"
end
end
end
endThis adds symfony:dizda:backup:start command to capifony. To launch it automatically on deploy you might use:
# 1) Launches backup right before deploy
before "deploy", "symfony:dizda:backup:start"
# 2) Launches backup after deploy
after "deploy", "symfony:dizda:backup:start"To be sure your backup scripts are actually run you can report each successful backup to deadmanssnitch.com using DeadmanssnitchBundle.
This bundle was inspired from KachkaevDropboxBackupBundle.
Enjoy, PR are welcome !
No open issues yet, or sync has not completed.