xedin/symfony2-db-backup-bundle

Fork of https://github.com/dizda/CloudBackupBundle. Used to create backup of selected db (mongo / mysql / etc)

1.4.0 2013-09-26 20:33 UTC

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 :

But also :

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 !