dizda / cloud-backup-bundle
能够备份您的数据库并将其上传到云端(Dropbox、CloudApp、GoogleDrive等)
Requires
- php: ^5.5 || ^7.0
- psr/log: ^1.0.1
- symfony/framework-bundle: ^2.3 || ^3.0
Requires (Dev)
- google/apiclient: 1.1.7
- symfony/symfony: ^2.3.25
Suggests
- dropbox/dropbox-sdk: To enable upload to Dropbox
- happyr/google-site-authenticator-bundle: To enable upload dumps on google drive.
- jongotlin/deadmanssnitch-bundle: To report your successful backups to deadmanssnitch.com
- knplabs/knp-gaufrette-bundle: To use Gaufrette as a cloud storage
- matthiasplappert/cloudapp-api: To support upload to CloudApp
- oneup/flysystem-bundle: To use Flysystem as a cloud storage
This package is not auto-updated.
Last update: 2024-03-02 09:29:28 UTC
README
此包可以帮助您使用一个Symfony2命令备份数据库并将其上传到云端。
您可以
- 导出一个数据库
- 导出所有数据库
- 每次可以导出不同类型的数据库
- 上传到多个云服务
支持的数据库
- MongoDB
- MySQL
- PostgreSQL(不包括all_databases选项)
支持的云服务
- Dropbox (Dropbox SDK)
- CloudApp (感谢 CloudAPP-API-PHP-wrapper)
- Amazon S3(通过 KnpGaufretteBundle 或 OneupFlysystemBundle)
- Google Drive(感谢 HappyrGoogleSiteAuthenticatorBundle)
- Rackspace(通过 OneupFlysystemBundle)
但也可以
- 本地(通过 KnpGaufretteBundle 或 OneupFlysystemBundle)
- FTP(通过 KnpGaufretteBundle 或 OneupFlysystemBundle)
- sFTP(通过 KnpGaufretteBundle 或 OneupFlysystemBundle)
- GridFS(通过 KnpGaufretteBundle 或 OneupFlysystemBundle)
- MogileFS(通过 KnpGaufretteBundle)
- WebDAV(通过 OneupFlysystemBundle)
支持哦:-)
支持的压缩工具
- 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
注意!并非所有处理器、客户端和数据库都支持恢复。已备份的文件不会被恢复。
我应该使用哪个归档器?
tar
和zip
归档器产生的压缩文件大小相同,但tar
压缩速度更快。7z
归档器非常慢,但效果加倍。tar
归档器不支持加密,其他归档器支持。
注意您的系统可能没有安装
zip
和7z
归档器。但tar
通常是预装的。
选择指南
- 如果您不需要密码保护并且有足够的磁盘空间,最佳选择是
tar
。 - 如果您需要密码保护并且有足够的磁盘空间,最佳选择是
zip
。 - 如果您没有足够的磁盘空间(或者您会经常进行备份)并且只备份文本数据(例如,数据库转储),最佳选择是
7z
。
注意任何归档器都可以很好地压缩文本文件(并且可以更好地压缩结构化文本,例如sql、css、html/xml)。但对于二进制文件(图像、音频、视频)则不能很好地压缩。如果您有小型数据库转储和大型的二进制数据,最佳选择将是
tar
或zip
。
归档器比较
未压缩的归档内容是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!