ellera / yii2-backup
yii2应用的控制台备份
Requires
- php: >=7.1.0
- ext-zip: *
- yiisoft/yii2: ~2.0.0
README
yii2应用的控制台备份。
当前限制
- 目前只支持本地的MySQL
- 需要Linux系统
开始使用
安装
安装此扩展的首选方式是通过 composer。
运行以下命令
php composer.phar require ellera/yii2-backup
或将以下内容添加到您的 composer.json
文件的 require 部分中。
"ellera/yii2-backup": "*"
基本用法
将以下内容添加到您的配置文件中。对于yii2高级模板,此文件应位于 console/config/main.php
中,对于基本模板,应位于 config/console.php
中。您可以使用其他名称,但需要相应地调整命令。
'modules' => [ ... 'backup' => [ 'class' => 'ellera\backup\Module' ] ... ]
然后迁移数据库迁移。这将创建一个名为 backup
的表。
php yii migrate/up --migrationPath=@vendor/ellera/yii2-backup/src/migrations
迁移完成后,您就可以备份您的网站了。使用 php yii *command*
或 ./yii *command*
并使用以下表中的命令
手册:创建备份
php yii backup/create "您的注释"
定时任务:创建备份
php yii backup/create/cron "定时任务 - 每日备份"
手册:列出备份
php yii backup/list (# 可选的页码)
手册:恢复备份
php yii backup/restore #
这将创建一个恢复前状态的额外备份
手册:删除备份
php yii backup/delete #
高级用法
备份文件和文件夹
您可以通过将它们添加到文件夹数组中来备份任意数量的位置。要创建备份需要文件夹和文件的读取访问权限,要恢复需要写入/删除访问权限。文件夹将被压缩并保存在备份文件夹中。
'modules' => [ ... 'backup' => [ 'class' => 'ellera\backup\Module', 'folders' => [ 'images' => '@app/web/images' ], ] ... ]
更改或添加数据库处理器
您可以备份任意数量的数据库,但它们必须在配置中定义为 yii\db\Connection
。将连接名称添加到数组中(默认为 db
)。
'modules' => [ ... 'backup' => [ 'class' => 'ellera\backup\Module', 'databases' => [ 'db', 'db2' ], ] ... ]
数据库冲突
如果您已经有一个名为 backup
的表,请创建一个带有您自己的迁移的表,并在配置中将 'table' => 'new_table_name'
添加到配置中。表的内容可以在 迁移 中找到。
'modules' => [ ... 'backup' => [ 'class' => 'ellera\backup\Module', 'table' => 'your_new_table_name' ] ... ]
更改默认备份位置
如果您想将备份存储在其他目录中,请将 'path' => 'new/path'
添加到配置中。
此变量通过 Yii::getAlias()
解析,默认为 @app/_backup
。
'modules' => [ ... 'backup' => [ 'class' => 'ellera\backup\Module', 'path' => '@app/_backup' ] ... ]
上传到远程服务器
如果您想在多个服务器上实现冗余备份,此模块支持通过SSH的 scp
。要使用此功能,您需要设置SSH密钥,并且用户必须有权访问配置中指定的远程文件夹。强烈建议在远程服务器上创建一个用户来执行此操作——不要使用root。
'modules' => [ ... 'backup' => [ 'class' => 'ellera\backup\Module', 'servers' => [ // Unique name 'server_name' => [ // Server IP or domain 'host' => '192.186.0.1', // Server username 'user' => 'remote_user', // Remote backup path 'path' => '/var/backups/myserver' ] ] ] ... ]
创建定时任务
如果您想自动化备份,可以使用 create/cron
方法 php yii backup/create/cron "定时任务 - 每日备份"
。此方法更简洁,只会输出一行用于记录到文件。
一个示例定时任务可能如下所示
0 0 * * * php /path/to/yii/folder/yii backup/create/cron "Nightly automated backup" >> /var/logs/backup.log 2>&1
自动清理
如果您希望系统自动清除旧备份,您可以配置 automated_cleanup
。
automated_cleanup
默认为 false,并需要一个布尔值数组来激活。
'modules' => [ 'backup' => [ 'class' => 'ellera\backup\Module', 'automated_cleanup' => [ 'daily' => true, 'weekly' => true, 'monthly' => true, 'yearly' => true ] ] ],
激活后,cron 方法将删除上一个时间段之前的所有备份,除了最新的备份。
让我们看看一个例子:如果您运行每小时备份,但已配置 'daily' => true
,则新的一天第一个 cron 作业将删除上一个时间段之前的所有备份,除了最新的备份。
可扩展的方法
如果您需要在备份和恢复前后更改系统状态,您可以通过扩展 Methods 类来实现。这可以用来关闭所有数据库连接或将系统置于维护模式。
在您的项目中创建一个新文件。例如 console\components\BackupMethods
<?php namespace console\components; class BackupMethods extends \ellera\backup\components\Methods { public function beforeCreate() : bool { return true; } public function afterCreate() : bool { return true; } public function beforeRestore() : bool { return true; } public function afterRestore() : bool { return true; } }
并更新配置以使用此文件
'modules' => [ 'backup' => [ 'class' => 'ellera\backup\Module', 'methods_class' => 'console\components\BackupMethods' ] ],
这些方法将在创建和恢复前后被调用,如果 before 方法返回 false,则执行将停止。
如果 after 方法返回 false,它们将在终端/日志中输出警告。