jamielsharief / chronos
Chronos 数据库备份与恢复
Requires
- php: >=7.3.0
- originphp/console: ^3.15
- originphp/defer: ^3.0
- originphp/model: ^3.15
- originphp/process: ^3.17
- originphp/value-store: ^1.0
Requires (Dev)
- originphp/test-suite: ^3.15
- phpstan/phpstan: ^0.12.64
- phpunit/phpunit: ^9.5
README
Chronos 数据库备份与恢复提供了对 MySQL、Postgres 和 Sqlite 数据库进行轻松且无痛苦的备份。
每个过程,无论是转储、压缩还是加密,都由特定的二进制应用程序处理,然后相关扩展名附加到输出文件名。例如,chronos
不使用 gpg
进行压缩,也不使用 7zip
进行加密。这意味着可以轻松跟踪备份的创建过程,因此如果需要,可以无需 chronos
就可以解包。
要求
- 如果您要备份 MySQL 数据库,则需要
mysqldump
- 如果您要备份 Postgres 数据库,则需要
pgdump
- 如果您想要加密/解密数据,则需要
gpg
和openssl
- 如果您想要压缩备份,则需要
bzip2
、gzip
、7zip
或zip
可执行二进制文件
安装
要安装此软件包
$ 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
要使用压缩,只需提供压缩类型 7zip
、bzip2
、gzip
、unzip
或 zip
。
$ vendor/bin/chronos backup --compress gzip
要使用 AES
加密备份,可以使用 gpg
或 ssl
,它使用 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>
在恢复备份时,如果文件已加密,则会提示您输入密码。
压缩
可以使用 bzip2
、gzip
、7zip
和 zip
对备份进行压缩。
根据您的 Linux 发行版,您可能需要安装相关的二进制文件。为了简洁起见,我将所有压缩软件包放在一行中,但是您可以只安装您需要的。
Ubuntu/Debian
$ apt install bzip2 zip gzip p7zip-full
对于 Redhat/CentOS/Fedora
7zip 软件包位于 EPEL 存储库中,需要启用并安装
$ yum install bzip2 zip gzip p7zip p7zip-plugins
如果转储已压缩,则文件名将附加 bz2
、gz
、7z
或 zip
。
压缩比较
我使用单个表(包含 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
,但该版本不支持 pbkdf2
或 iter
。这两项功能 提高了安全性,应该使用。
使用 openssl
加密数据比较棘手,因为加密时使用的设置在解密时也需要相同,因此您不能以不同的方式在不同的安装上加密数据。openssl 的主要更改可能会影响备份/恢复操作。
在 MacOS 上,您可以像这样简单地安装 openssl
$ brew update $ brew install openssl
如果使用 openssl
对转储进行加密,它将添加 enc
扩展名。