jamielsharief/chronos

Chronos 数据库备份与恢复

0.1.6 2021-09-17 15:09 UTC

This package is auto-updated.

Last update: 2024-09-17 21:59:14 UTC


README

license build coverage

Chronos 数据库备份与恢复提供了对 MySQL、Postgres 和 Sqlite 数据库进行轻松且无痛苦的备份。

每个过程,无论是转储、压缩还是加密,都由特定的二进制应用程序处理,然后相关扩展名附加到输出文件名。例如,chronos 不使用 gpg 进行压缩,也不使用 7zip 进行加密。这意味着可以轻松跟踪备份的创建过程,因此如果需要,可以无需 chronos 就可以解包。

要求

  • 如果您要备份 MySQL 数据库,则需要 mysqldump
  • 如果您要备份 Postgres 数据库,则需要 pgdump
  • 如果您想要加密/解密数据,则需要 gpgopenssl
  • 如果您想要压缩备份,则需要 bzip2gzip7zipzip 可执行二进制文件

安装

要安装此软件包

$ composer require jamielsharief/chronos

创建一个文件夹,用于存储您的备份,并设置权限以便您可以写入它,例如,如果您是 www-data 组的成员

$ mkdir /backups
$ chown www-data:www-data /backups
$ chmod 0775 /backups

用法

首先,您需要初始化您的安装,这将创建项目文件夹中的 chronos.json 文件,其中包含数据库设置。

$ vendor/bin/chronos init
          __                               
    _____/ /_  _________  ____  ____  _____
   / ___/ __ \/ ___/ __ \/ __ \/ __ \/ ___/
  / /__/ / / / /  / /_/ / / / / /_/ (__  ) 
  \___/_/ /_/_/   \____/_/ /_/\____/____/

version 0.1.0

Starting chronos initialization
Engine  (mysql/postgres/sqlite) [mysql]
> mysql

Host [localhost]
> mysql

Port [3306]
> 3306

Username [root]
> root

Password
> 

Backup directory
> /backups/crm

Enter the default database name to backup.
Database name
> 

[ OK ] chronos.json saved

您是在多应用程序的服务器上安装吗?如果是这样,在您的备份文件夹内为每个应用程序设置一个文件夹可能是个好主意,例如 /backups/crm/backups/helpdesk

如果在设置期间提供了默认数据库,则可以直接运行备份命令,这将备份在 chronos.json 中列出的数据库,如果没有配置数据库,则 chronos 将显示数据库列表,并要求您选择一个。

$ vendor/bin/chronos backup 

如果您没有提供或想要备份不同的数据库,则可以传递数据库名称作为参数。

$ vendor/bin/chronos backup bookmarks
          __                               
    _____/ /_  _________  ____  ____  _____
   / ___/ __ \/ ___/ __ \/ __ \/ __ \/ ___/
  / /__/ / / / /  / /_/ / / / / /_/ (__  ) 
  \___/_/ /_/_/   \____/_/ /_/\____/____/

version 0.1.0

[ OK ] Backup 'bookmarks'

Took 0.06 seconds

您还可以同时备份多个数据库。

$ vendor/bin/chronos backup crm helpdesk accounting 

要使用压缩,只需提供压缩类型 7zipbzip2gzipunzipzip

$ vendor/bin/chronos backup --compress gzip

要使用 AES 加密备份,可以使用 gpgssl,它使用 openssl

$ vendor/bin/chronos backup --encrypt gpg # this will ask for password
$ CHRONOS_PASSWORD=secret vendor/bin/chronos backup crm --encrypt gpg # uses password from env var

要列出备份

$ vendor/bin/chronos backup list
          __                               
    _____/ /_  _________  ____  ____  _____
   / ___/ __ \/ ___/ __ \/ __ \/ __ \/ ___/
  / /__/ / / / /  / /_/ / / / / /_/ (__  ) 
  \___/_/ /_/_/   \____/_/ /_/\____/____/

version 0.1.0

Backups path: /backups/bookmarks
+----------------------+--------------------------------------+----------+
| Date                 | Backup                               | Size     |
+----------------------+--------------------------------------+----------+
| 2021-01-16 14:11:15  | bookmarks-20210116141115.sql.7z.gpg  | 1.48 KB  |
| 2021-01-16 14:10:56  | bookmarks-20210116141056.sql.gpg     | 4.23 KB  |
| 2021-01-16 14:10:46  | bookmarks-20210116141046.sql.zip     | 1.53 KB  |
| 2021-01-16 14:10:42  | bookmarks-20210116141042.sql         | 4.21 KB  |
+----------------------+--------------------------------------+----------+

要恢复备份

$ vendor/bin/chronos restore bookmarks-20210116132550.sql.bz2
          __                               
    _____/ /_  _________  ____  ____  _____
   / ___/ __ \/ ___/ __ \/ __ \/ __ \/ ___/
  / /__/ / / / /  / /_/ / / / / /_/ (__  ) 
  \___/_/ /_/_/   \____/_/ /_/\____/____/

version 0.1.0

 WARNING   Database 'bookmarks' already exists
Existing data will be overwritten, continue?  (yes/no) [no]
> yes

[ SKIPPED ] Create database 'bookmarks'
[ OK ] Restore 'bookmarks' from 'bookmarks-20210116132550.sql.bz2'

Took 1.22 seconds

如果您想将备份恢复到不同的数据库,则与创建备份的数据库不同

$ vendor/bin/chronos restore bookmarks-20210116132550.sql.bz2 <different-name>

在恢复备份时,如果文件已加密,则会提示您输入密码。

压缩

可以使用 bzip2gzip7zipzip 对备份进行压缩。

根据您的 Linux 发行版,您可能需要安装相关的二进制文件。为了简洁起见,我将所有压缩软件包放在一行中,但是您可以只安装您需要的。

Ubuntu/Debian

$ apt install bzip2 zip gzip p7zip-full

对于 Redhat/CentOS/Fedora

7zip 软件包位于 EPEL 存储库中,需要启用并安装

$ yum install bzip2 zip gzip p7zip p7zip-plugins

如果转储已压缩,则文件名将附加 bz2gz7zzip

压缩比较

我使用单个表(包含 1,000 和 10,000 条随机数据的记录)进行了简单的测试。

这是生成数据的方式

$post = $this->Post->new([
    'title' => uniqid(), // random 13 char string
    'body' => Security::hex(16), // random 16 char string
    'published' => rand(0, 1)
]);

这是得到的结果

                1,000       10,000
sql             76.42 KB    770.76 KB
bzip2           18.93 KB    147.25 KB
gzip            18.93 KB    185.42 KB    
zip             19.12 KB    185.52 KB
7zip            13.97 KB    133.31 KB

加密

加密是在压缩之后进行的,以提高有效性,但在某些情况下,由于 旁路攻击,可能会变得不太安全。

GPG(推荐)

NASA 推荐 使用 GPG 对文件进行加密,这可以在 Linux 操作系统上轻松安装(如果尚未安装的话)

对于 Ubuntu/Debian

$ sudo apt install gnupg

对于 Redhat/CentOS/Fedora

$ sudo yum install gnupg

OpenSSL(已弃用)

请使用 GPG 代替

要使用此加密引擎,您需要安装 openssl,这已经在 Linux 系统上,但在 Mac 上包含 libressl,但该版本不支持 pbkdf2iter。这两项功能 提高了安全性,应该使用。

使用 openssl 加密数据比较棘手,因为加密时使用的设置在解密时也需要相同,因此您不能以不同的方式在不同的安装上加密数据。openssl 的主要更改可能会影响备份/恢复操作。

在 MacOS 上,您可以像这样简单地安装 openssl

$ brew update
$ brew install openssl

如果使用 openssl 对转储进行加密,它将添加 enc 扩展名。