dizda/cloud-backup-bundle

此包已被弃用且不再维护。未建议替代包。

能够备份您的数据库并将其上传到云端(Dropbox、CloudApp、GoogleDrive等)

安装数: 130,431

依赖者: 2

建议者: 0

安全: 0

星标: 197

关注者: 16

分支: 58

开放问题: 33

类型:symfony-bundle

3.5.0 2017-01-31 12:10 UTC

README

此包可以帮助您使用一个Symfony2命令备份数据库并将其上传到云端。

您可以

  • 导出一个数据库
  • 导出所有数据库
  • 每次可以导出不同类型的数据库
  • 上传到多个云服务

支持的数据库

  • MongoDB
  • MySQL
  • PostgreSQL(不包括all_databases选项)

支持的云服务

但也可以

支持哦:-)

支持的压缩工具

  • Tar - 快速且中等有效,不支持密码
  • Zip - 快速且中等有效,支持密码
  • 7zip - 非常慢但非常有效,支持密码

支持的分割工具

  • ZipSplit - 将zip文件分割成更小的zip文件

安装(>=Symfony 2.1)

Composer

将CloudBackupBundle及其依赖项下载到vendor目录。您可以使用Composer进行自动化处理

$ php composer.phar require dizda/cloud-backup-bundle

Composer会将包安装到vendor/dizda目录。

将包添加到您的应用程序内核

// app/AppKernel.php

public function registerBundles()
{
    $bundles = array(
        // ...
        new Dizda\CloudBackupBundle\DizdaCloudBackupBundle(),
        // ...
    );
}

配置

以下是包的默认配置

dizda_cloud_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
    timeout: 300
    restore: false # Set to true to enable restore command
    processor:
        type: tar # Required: tar|zip|7z
        options:
            compression_ratio: 6
            password: qwerty
            # Split into many files of `split_size` bytes
            split:
                enable: false # Default false
                split_size: 1000 # Make each zip files no larger than "split_size" in bytes
                storages: [ Dropbox, CloudApp, GoogleDrive, Gaufrette ] # Which cloud storages will upload split files
    folders: [ web/uploads , other/folder ]
    cloud_storages:
        # Local storage definition
        local:
            path: ~ # Required
        # 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(s) service name
                - local_backup_filesystem
                - amazon_backup_filesystem
        flysystem:
            service_name: # Flysystem filesystem(s) service name
                - oneup_flysystem.acme_filesystem
        google_drive:
          token_name: ~ # Required
          remote_path: ~ # Not required, default "/", but you can use path like "/Accounts/backups/"
        # Using dropbox via official API. You need to add "dropbox/dropbox-sdk": "1.1.*" in your composer.json file
        dropbox_sdk:
            remote_path: ~ # Required. Path to upload files (where the root '/' will be application folder)
            access_token: ~ # Required. Access token provided by DropBox to authenticate your application. You can follow instructions at https://www.dropbox.com/developers/core/start/php

    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: ~
            ignore_tables:       # Specify full name if dumping all databases. `dbname.tablename`
                - table1
                - table2

        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: ~

建议在您的parameters.yml文件中保留登录和密码的真实值,例如。

# app/config/config.yml
dizda_cloud_backup:
    processor:
        type: tar
        options:
            password: %dizda_cloud_archive_password%

    cloud_storages:
        dropbox_sdk:
            access_token: %dizda_cloud_dropbox_token%
            remote_path: /backup

    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_token:     myDropboxUser
    dizda_cloud_mongodb_user:     mongodbUser
    dizda_cloud_mongodb_password: mongodbPass
    dizda_cloud_archive_password: ArchivePassword
    # ...

用法

该软件包为symfony控制台添加了一个命令:app/console dizda:backup:start,您需要定期作为cron作业执行它。例如,以下cron命令每天早上6点在服务器上备份数据库。

# m h  dom mon dow   command
0 6 * * * cd /var/www/yourproject && php app/console --env=prod dizda:backup:start > /dev/null 2>&1

信息:为了编辑www-data用户的crontab(以防止权限错误)

$ crontab -u www-data -e

或者简单来说

$ php app/console --env=prod dizda:backup:start

此外,使用-F或--folder选项,文件夹也将被添加到备份中。

显然,如果在备份过程中出现一些问题,您可以配置monolog向您发送电子邮件。

当在本地或测试服务器上工作时,您可以配置该软件包以启用恢复。设置restore: true,以下命令将可用

$ php app/console dizda:backup:restore --force

注意!并非所有处理器、客户端和数据库都支持恢复。已备份的文件不会被恢复。

我应该使用哪个归档器?

tarzip归档器产生的压缩文件大小相同,但tar压缩速度更快。7z归档器非常慢,但效果加倍。tar归档器不支持加密,其他归档器支持。

注意您的系统可能没有安装zip7z归档器。但tar通常是预装的。

选择指南

  • 如果您不需要密码保护并且有足够的磁盘空间,最佳选择是tar
  • 如果您需要密码保护并且有足够的磁盘空间,最佳选择是zip
  • 如果您没有足够的磁盘空间(或者您会经常进行备份)并且只备份文本数据(例如,数据库转储),最佳选择是7z

注意任何归档器都可以很好地压缩文本文件(并且可以更好地压缩结构化文本,例如sql、css、html/xml)。但对于二进制文件(图像、音频、视频)则不能很好地压缩。如果您有小型数据库转储和大型的二进制数据,最佳选择将是tarzip

归档器比较

未压缩的归档内容是42.2M大小的sql转储。此表表示归档器的效率。第三列包含压缩归档文件和压缩百分比(越低越好)。第四列包含压缩时间和其比率(与第一行比较)(越低越好)。

归档器 压缩 归档大小 执行时间
tar 默认(6) 8.78M(20.8%) 4.44s(1.00x)
tar 最佳(9) 8.45M(20.0%) 9.89s(2.23x)
zip 默认(6) 8.78M(20.8%) 5.39s(1.21x)
zip 最佳(9) 8.45M(20.0%) 11.03s(2.48x)
7z 默认(5) 4.42M(10.5%) 31.06s(7.00x)
7z 最佳(9) 4.24M(10.0%) 38.88s(8.76x)

Capifony集成

如果您使用capifony进行部署,可以获取示例任务以简化备份。

在您的deploy.rb文件中添加以下任务

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

这将为capifony添加symfony:dizda:backup:start命令。为了在部署时自动启动它,您可能需要使用

# 1) Launches backup right before deploy
before "deploy", "symfony:dizda:backup:start"

# 2) Launches backup after deploy
after "deploy", "symfony:dizda:backup:start"

向Deadmanssnitch.com报告

为了确保您的备份脚本是实际运行的,您可以使用DeadmanssnitchBundle将每次成功的备份报告到deadmanssnitch.com

结束

此软件包受到KachkaevDropboxBackupBundle的启发。

享受,欢迎PR!