您的位置:网站首页 > 动态 > 动态

一键备份还原系统(经典一键备份还原)

2022-09-30 18:02     发布者:何龙
导读ClickHouse 虽然提供了一些 备份还原 的方法,但目前总体来看,都不算 “自动化”。在ClickHouse 的 2021 Roadmap 中,有一项关于备份和还原的议题,

ClickHouse 虽然提供了一些 备份&还原 的方法(我在书里都有介绍),但目前总体来看,都不算 “自动化”。

在ClickHouse 的 2021 Roadmap 中,有一项关于备份和还原的议题,期望通过添加 BACKUP 和 RESTORE 命令,来实现一键备份和还原。

该议题涵盖的内容很多,目前的进展是,在21.10 release 版本中已经能够使用到 BACKUP/RESTORE 关键字,但是该功能还处于非常初级的阶段,远不能在生产环境中使用。

即便如此,还是阻止不了我一探究竟的好奇心

,接下来就让我们体验一下这项新功能吧。

新建一张表,并写入数据:

CREATE TABLE backup_test
(
    id UInt64,
    value String,
    date DateTime
)
ENGINE = MergeTree()
ORDER BY id
PARTITION BY toYYYYMM(date)


INSERT INTO backup_test(id, value,date) VALUES (1, &39;nauu1&39;,&39;2021-09-01&39;),(2, &39;nauu2&39;,&39;2021-09-01&39;),(3, &39;bob&39;,&39;2021-10-01&39;);

执行 BACKUP 备份命令:

BACKUP TABLE backup_test TO &39;backup_test_1&39;


Query id: ce089687-c7ae-4432-8a04-cbe68a79ca4f


Ok.


0 rows in set. Elapsed: 0.026 sec.

至此,表的备份就算完成了,是不是比以前简单多了。

BACKUP 命令到底做了什么呢? 进入到元数据目录,会发现相比之前,多了一个backups 目录:

 % pwd
 /clickhouse/ch9-data/data/backups
backups % ls -l
total 0
drwxr-xr-x  5 nauu  staff  160 10 27 20:52 backup_test_1

在执行 BACKUP 之后,在 backups 目录下,将原表的元数据以及数据,都复制了一份:

backup_test_1 % ls -l
total 0
drwxr-xr-x  3 nauu  staff  96 10 27 20:52 data
drwxr-xr-x  3 nauu  staff  96 10 27 20:52 metadata

数据的备份:

元数据的备份:

.sql 文件保存了原表的 DDL 语句:

default % cat backup_test.sql
CREATE TABLE default.backup_test (`id` UInt64, `value` String, `date` DateTime) ENGINE = MergeTree PARTITION BY toYYYYMM(date) ORDER BY id SETTINGS storage_policy = &39;default_local&39;, index_granularity = 8192%

现在执行 RESTORE 还原命令:

RESTORE TABLE backup_test FROM &39;backup_test_1&39;


Query id: 7626aa03-f886-4d44-b34c-97ecc617e602


Ok.


0 rows in set. Elapsed: 0.022 sec.

查询原表,发现之前的数据被还原再次写入了一次:

SELECt *
FROM backup_test


Query id: b6b19837-959e-44b8-a372-14e46c21fb7d


┌─id─┬─value─┬────────────────date─┐
│  1 │ nauu1 │ 2021-09-01 00:00:00 │
│  1 │ nauu1 │ 2021-09-01 00:00:00 │
│  2 │ nauu2 │ 2021-09-01 00:00:00 │
│  2 │ nauu2 │ 2021-09-01 00:00:00 │
└────┴───────┴─────────────────────┘
┌─id─┬─value─┬────────────────date─┐
│  3 │ bob   │ 2021-10-01 00:00:00 │
│  3 │ bob   │ 2021-10-01 00:00:00 │
└────┴───────┴─────────────────────┘


6 rows in set. Elapsed: 0.005 sec.

把原表删除,然后再还原:

DROp TABLE backup_test


RESTORE TABLE backup_test FROM &39;backup_test_1&39;

再次查询原表,表的元数据和数据都恢复了:

SELECt *
FROM backup_test


Query id: ed6f2390-1d6e-45a5-a494-7f9e9d3403b9


┌─id─┬─value─┬────────────────date─┐
│  3 │ bob   │ 2021-10-01 00:00:00 │
└────┴───────┴─────────────────────┘
┌─id─┬─value─┬────────────────date─┐
│  1 │ nauu1 │ 2021-09-01 00:00:00 │
│  2 │ nauu2 │ 2021-09-01 00:00:00 │
└────┴───────┴─────────────────────┘


3 rows in set. Elapsed: 0.004 sec.

还可以还原成另外的表名:

RESTORE TABLE backup_test INTO backup_test_9 FROM &39;backup_test_1&39;


Query id: 729e8cef-f798-41c6-93ce-4d99f3be7ffa


Ok.


0 rows in set. Elapsed: 0.023 sec.

如果这个功能加以完善,那备份和还原就方便多啦。

不过,随着进一步测试,会发现这项功能确实还处于初级阶段,比如:

目前不支持对 Distributed 分布式表:

BACKUP TABLE backup_test_all TO &39;backup_test_all_backup&39;


Query id: a50e8a4a-7182-44f3-875d-d45d56212cdb




0 rows in set. Elapsed: 0.002 sec. 


Received exception from server (version 21.10.1):
Code: 60. DB::Exception: Received from ch9.nauu.com:9000. DB::Exception: Table default.backup_test_all doesn&39;t exist. (UNKNOWN_TABLE)

对于复制表,支持 BACKUP,但不支持 RESTORE

(-_-||) :

支持
BACKUP TABLE backup_test_replicated TO &39;backup_test_replicated_backup&39;

执行 RESTORE 会报错:

RESTORE TABLE backup_test_replicated FROM &39;backup_test_replicated_backup&39;


Query id: 0c64517e-7979-41c1-a665-c4fe5dab2fc4




0 rows in set. Elapsed: 0.002 sec. 


Received exception from server (version 21.10.1):
Code: 48. DB::Exception: Received from ch10.nauu.com:9000. DB::Exception: Table engine ReplicatedMergeTree doesn&39;t support restoring. (NOT_IMPLEMENTED)
免责声明:本文章由会员“何龙”发布如果文章侵权,请联系我们处理,本站仅提供信息存储空间服务如因作品内容、版权和其他问题请于本站联系

猜你喜欢

最新文章