备份网站数据库到 Dropbox 作者: truesnow 发布于: 6个月前 收录于: 个人网站开发 399 0 摘要:适用于使用 Laravel 开发的小型网站,定时备份数据库到 Dropbox 教程。 [TOC] 如果你的项目需要备份数据库,使用 Laravel 开发,可以参考以下内容来使用 backup-manager 这个插件来将数据库备份到 Dropbox。 步骤如下: 1. 创建一个 Dropbox APP 2. Composer 安装相关包 3. 配置数据库和 Dropbox 相关信息 4. 运行 artisan 命令备份 MySQL 数据库 5. 创建定时任务定期备份 ## 创建 Dropbox APP [点此链接]( https://www.dropbox.com/developers/apps/create ) 到 Dropbox 开发者中心创建一个 Dropbox APP。 得到以下信息: - APP名称 - APP key - APP secret - Oauth2 access token ## 安装 backup-manager 等依赖包 backup-manager 有专门为 Laravel 开发的包,composer 安装: ```sh composer require backup-manager/laravel:1.3.1 -vvv ``` > 具体安装版本对 PHP 等版本的要求查看:https://packagist.org/packages/backup-manager/laravel backup-manager 支持多种备份形式,可以通过 ftp、sftp 备份,也可以备份到 Amazon S3、Dropbox,不同的备份形式要安装相应的依赖包。这里备份到 Dropbox 需要安装 `flysystem-dropbox` 这个 Dropbox API包: [backup-manager文档](https://github.com/backup-manager/laravel) 上写的是安装下面的包: ```sh # to support dropbox (api v2) composer require srmklive/flysystem-dropbox-v2 ``` 如果你是 PHP7 以下版本,Composer 安装: ``` composer require league/flysystem-dropbox ``` 如果你是 PHP7 以上版本,Composer 安装: ``` composer require spatie/flysystem-dropbox ``` ## 配置 - `config/app.php` 添加 service provider ```php BackupManager\Laravel\Laravel5ServiceProvider::class, ``` - `config/backup-manager.php` 执行以下命令生成 backup-manager 配置文件: ```sh php artisan vendor:publish --provider="BackupManager\Laravel\Laravel5ServiceProvider" ``` > 这里 Laravel5ServiceProvider 要改成你对应 Laravel 版本,例如:Laravel55ServiceProvider,否则报错 ``` Declaration of BackupManager\Laravel\Laravel51Compatibility::table(array $headers, $rows, $style = 'default') should be compatible with Illuminate\Console\Command: :table($headers, $rows, $tableStyle = 'default', array $columnStyles = Array) ``` `config/backup-manager.php` 中添加 Dropbox 相关配置如下: ``` 'dropbox' => [ 'type' => 'Dropbox', 'token' => 'your-token', 'key' => 'your-key', 'secret' => 'your-secret', 'app' => 'your-app-name', 'root' => '/your-app-folder', ], ``` 建议配置到 *.env* 中 ``` 'dropbox' => [ 'type' => 'DropboxV2', 'token' => env('DROPBOX_TOKEN'), 'key' => env('DROPBOX_KEY'), 'secret' => env('DROPBOX_SECRET'), 'app' => env('DROPBOX_APP'), 'root' => env('DROPBOX_ROOT'), ], ``` *.env* ``` # Dropbox DROPBOX_TOKEN= DROPBOX_KEY= DROPBOX_SECRET= DROPBOX_APP= DROPBOX_ROOT= ``` ## artisan命令备份数据库 可执行以下 artisan 命令:`db:backup`、`db:restore` 和 `db:list`。 在命令行运行以下 artisan 命令备份数据库: ```sh php artisan db:backup --database=mysql --destination=dropbox --destinationPath=`date +\%Y/%Y%m%d_%H%M%S` --compression=gzip ``` 以上命令执行后会备份数据到 Dropbox 目录:*/your-app-folder/YEAR/DATE.gz* (例如:*/backups/2020/20200707_120000.gz*) > 若无法连接 Dropbox 接口,访问 https://www.ipaddress.com/ ,输入网址 api.dropbox.com 得到其 host,并添加到机器 */etc/hosts* 中 ``` 162.125.3.7 api.dropboxapi.com ``` ## 设置定时任务 配置 Laravel 任务调度 crontab 定时任务: ```sh * * * * * /usr/local/bin/php /your/website/folder/artisan schedule:run 1>> /dev/null 2>&1 ``` 在 *app/Console/kernel.php* 设置任务: ```sh protected function schedule(Schedule $schedule) { $schedule->command('inspire')->hourly(); $schedule->command('db:backup --database=mysql --destination=dropbox --destinationPath=`date +\%Y/%Y%m%d_%H%M%S` --compression=gzip')->weekly()->mondays()->at('01:00'); } ``` 每周周一的凌晨点进行数据库备份,备份文件名格式:`20200707_120000.gz` > **注意**:此种备份方式适合小型网站,数据量不大的情况。 ## 参考链接 - [Create a new app on the Dropbox Platform](https://www.dropbox.com/developers/apps/create) - [backup-manager/laravel - Packagist](https://packagist.org/packages/backup-manager/laravel) - [spatie/flysystem-dropbox - Packagist](https://packagist.org/packages/spatie/flysystem-dropbox) - [backup-manager/laravel - Github](https://github.com/backup-manager/laravel)
所有评论(0)
暂无评论~_~