xedin / symfony2-db-backup-bundle
Fork of https://github.com/dizda/CloudBackupBundle. Used to create backup of selected db (mongo / mysql / etc)
Requires
- php: >=5.3.2
- knplabs/gaufrette: 0.2.*@dev
- knplabs/knp-gaufrette-bundle: 0.2.*@dev
- symfony/framework-bundle: >=2.1
Requires (Dev)
- symfony/symfony: v2.3.1
Suggests
- matthiasplappert/cloudapp-api: dev-master
This package is not auto-updated.
Last update: 2024-04-23 04:35:49 UTC
README
This bundle helps you to backup your databases and upload it to the cloud with only one Symfony2 command.
You can :
- Dump one database
- Dump all databases
- Different types of databases can be dumped each time
- Upload to several Cloud services
Databases supported :
- MongoDB
- MySQL
- PostgreSQL (excluding all_databases option)
Cloud services supported :
- Dropbox (with the help of DropboxUploader by hakre)
- CloudApp (thanks to CloudAPP-API-PHP-wrapper)
- Amazon S3 (through KnpGaufretteBundle)
- Google Drive (soon..)
But also :
- Local (through KnpGaufretteBundle)
- FTP (through KnpGaufretteBundle)
- sFTP (through KnpGaufretteBundle)
- GridFS (through KnpGaufretteBundle)
- MogileFS (through KnpGaufretteBundle)
are supported :-)
Installation (>=Symfony 2.1)
Composer
Download BackupBundle and its dependencies to the vendor directory. You can use Composer for the automated process:
$ php composer.phar require dizda/cloud-backup-bundle dev-master
Composer will install the bundle to vendor/dizda
directory.
Adding bundle to your application kernel
// app/AppKernel.php public function registerBundles() { $bundles = array( // ... new Knp\Bundle\GaufretteBundle\KnpGaufretteBundle(), new Dizda\BackupBundle\DizdaBackupBundle(), // ... ); }
Configuration
Here is the default configuration for the bundle:
dizda_backup: # By default backup files will have your servers hostname as prefix # such as: hostname_2014_01_01-21_08_39.tar output_file_prefix: hostname cloud_storages: # Dropbox account credentials (use parameters in config.yml and store real values in prameters.yml) dropbox: user: ~ # Required password: ~ # Required remote_path: ~ # Not required, default "/", but you can use path like "/Accounts/backups/" # CloudApp account. Can be optional, like dropbox. cloudapp: user: ~ # Required password: ~ # Required # or you can use Gaufrette as well (optional) gaufrette: service_name: ~ # Gaufrette filesystem service name databases: mongodb: all_databases: false # Only required when no database is set database: ~ # Required if all_databases is false db_user: ~ # Not required, leave empty if no auth is required db_password: ~ # Not required mysql: all_databases: false # Only required when no database is set database: ~ # Required if all_databases is false db_host: localhost # This, and following is not required and if not specified, the bundle will take ORM configuration in parameters.yml db_port: ~ # Default 3306 db_user: ~ db_password: ~ postgresql: database: dbname # Required db_host: localhost # This, and following is not required and if not specified, the bundle will take ORM configuration in parameters.yml db_port: ~ # Default 5432 db_user: ~ db_password: ~
It is recommended to keep real values for logins and passwords in your parameters.yml file, e.g.:
# app/config/config.yml dizda_backup: cloud_storages: dropbox: user: %dizda_cloud_dropbox_user% password: %dizda_cloud_dropbox_password% remote_path: %dizda_cloud_dropbox_remote_path% databases: mongodb: all_databases: false database: %dizda_cloud_mongodb_user% db_user: %dizda_cloud_mongodb_user% db_pass: %dizda_cloud_mongodb_password% mysql: # When no parameters is specified under mysql, the bundle taking those from parameters.yml postgresql: # When no parameters is specified under postgresql, the bundle taking those from parameters.yml
# 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_user: myDropboxUser dizda_cloud_dropbox_password: MyDropboxPassword dizda_cloud_mongodb_user: mongodbUser dizda_cloud_mongodb_password: mongodbPass # ...
Usage
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 * * * php /opt/www/symfony-project/app/console dizda:backup:start
Info : To edit crontab for the user www-data (to prevent permissions error) :
$ crontab -u www-data -e
or simply
$ php app/console dizda:backup:start
Capifony integration
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 end
This 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"
End
This bundle was inspired from KachkaevDropboxBackupBundle.
It is Symfony2.1, 2.2 and 2.3 compatible, I'll make some tests as soon as time permits.
Enjoy, PR are welcome !