前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ClickHouse BACKUP/RESTORE备份功能初体验

ClickHouse BACKUP/RESTORE备份功能初体验

作者头像
Nauu
发布2021-11-04 14:53:49
1.9K1
发布2021-11-04 14:53:49
举报

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

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

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

即便如此,还是阻止不了我一探究竟的好奇心,接下来就让我们体验一下这项新功能吧。

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

代码语言:javascript
复制
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, 'nauu1','2021-09-01'),(2, 'nauu2','2021-09-01'),(3, 'bob','2021-10-01');

执行 BACKUP 备份命令:

代码语言:javascript
复制
BACKUP TABLE backup_test TO 'backup_test_1'

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

Ok.

0 rows in set. Elapsed: 0.026 sec.

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

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

代码语言:javascript
复制
# % 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 目录下,将原表的元数据以及数据,都复制了一份:

代码语言:javascript
复制
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 语句:

代码语言:javascript
复制
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 = 'default_local', index_granularity = 8192%

现在执行 RESTORE 还原命令:

代码语言:javascript
复制
RESTORE TABLE backup_test FROM 'backup_test_1'

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

Ok.

0 rows in set. Elapsed: 0.022 sec.

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

代码语言:javascript
复制
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.

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

代码语言:javascript
复制
DROP TABLE backup_test

RESTORE TABLE backup_test FROM 'backup_test_1'

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

代码语言:javascript
复制
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.

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

代码语言:javascript
复制
RESTORE TABLE backup_test INTO backup_test_9 FROM 'backup_test_1'

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

Ok.

0 rows in set. Elapsed: 0.023 sec.

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

不过,随着进一步测试,会发现这项功能确实还处于初级阶段,比如: 目前不支持对 Distributed 分布式表:

代码语言:javascript
复制
BACKUP TABLE backup_test_all TO 'backup_test_all_backup'

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't exist. (UNKNOWN_TABLE)

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

(-_-||) :

代码语言:javascript
复制
#支持
BACKUP TABLE backup_test_replicated TO 'backup_test_replicated_backup'

执行 RESTORE 会报错:

代码语言:javascript
复制
RESTORE TABLE backup_test_replicated FROM 'backup_test_replicated_backup'

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't support restoring. (NOT_IMPLEMENTED)

这项功能的提案地址如下,我会持续关注,有新的进展再拿来和大家分享:

https://github.com/ClickHouse/ClickHouse/issues/8841

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-10-28,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 ClickHouse的秘密基地 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档