ellera/yii2-backup

yii2应用的控制台备份

安装次数: 8,058

依赖项: 0

建议者: 0

安全: 0

星标: 9

关注者: 3

分支: 2

开放问题: 1

类型:yii2-extension

v2.0.2 2019-01-17 07:52 UTC

This package is not auto-updated.

Last update: 2024-09-21 16:48:49 UTC


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 "您的注释"

Creating a backup

定时任务:创建备份

php yii backup/create/cron "定时任务 - 每日备份"

手册:列出备份

php yii backup/list (# 可选的页码)

Listing backups

手册:恢复备份

php yii backup/restore #

Restore backup

这将创建一个恢复前状态的额外备份

List after restore

手册:删除备份

php yii backup/delete #

Listing backups

高级用法

备份文件和文件夹

您可以通过将它们添加到文件夹数组中来备份任意数量的位置。要创建备份需要文件夹和文件的读取访问权限,要恢复需要写入/删除访问权限。文件夹将被压缩并保存在备份文件夹中。

'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,它们将在终端/日志中输出警告。