ClickHouse:使用clickhouse 您所在的位置:网站首页 access表备份 ClickHouse:使用clickhouse

ClickHouse:使用clickhouse

#ClickHouse:使用clickhouse| 来源: 网络整理| 查看: 265

基本使用

clickhouse-backup是一款针对clickhouse数据备份的开源工具:https://github.com/AlexAkulov/clickhouse-backup

下载安装

根据节点的操作系统,选择最新版本的rpm包。这里选择v2.1.3的x86版本。 image.png 安装命令:

rpm -ivh clickhouse-backup-2.1.3-1.x86_64.rpm

如果需要指定安装路径:

rpm -ivh --prefix=/path clickhouse-backup-2.1.3-1.x86_64.rpm 配置文件 clickhouse-backup default-config # 查看默认配置 clickhouse-backup print-config # 显示当前配置

如果需要修改配置,则需要在/etc/clickhouse-backup/config.yml中配置。 主要的配置:

general: remote_storage: s3 # 如果需要将数据推送到s3或者obs时 clickhouse: username: default # 登录的用户名 password: "" # 登录的密码 host: localhost # 节点ip port: 9001 # 节点端口,只支持tcp端口 disk_mapping: {} skip_tables: # 跳过的表 - system.* - INFORMATION_SCHEMA.* - information_schema.* - _temporary_and_external_tables.* s3: # obs或者s3相关的配置 access_key: "xxx" secret_key: "xxx" bucket: "xxx" endpoint: "xxx" region: acl: private assume_role_arn: "" force_path_style: false path: "zhj/" disable_ssl: false compression_level: 1 compression_format: tar sse: "" disable_cert_verification: false use_custom_storage_class: false storage_class: STANDARD concurrency: 4 part_size: 536870912 max_parts_count: 10000 allow_multipart_download: true debug: false 查看可以搬迁的表 clickhouse-backup tables

该命令会显示可以搬迁的库表,并显示对应表的数据量。 image.png 其中,第三列表示该表的存储磁盘配置,默认是default。配置可参考clickhouse的storage_configuration配置。

备份数据 clickhouse-backup create -t . # 指定需要同步的表 clickhouse-backup create # 同步节点上的所有表

如:clickhouse-backup create -t default.test backup_test 备份后可以通过list查看备份的结果 image.png

备份文件

备份数据存放的路径由clickhouse的config.xml中的path指定,在本例中是在:/data/bigdata/clickhouse/data1/ 在该路径下,会生成metadata,shadow和metadata.json。如下:

/data/bigdata/clickhouse/data/backup/ ├── backup_test │ ├── metadata # 记录了备份表的元数据 │ │ └── default # 表所在的库名 │ │ └── test.json # test表的元数据文件 │ ├── metadata.json # 整个备份文件的元数据信息 │ └── shadow # 存放了备份数据,如果表没有数据,在此目录下不会生成 │ └── default # 库名 │ └── test # 表名 │ └── default # 存储策略对应的disk,默认为default │ └── all_1_1_0 │ ├── checksums.txt │ ├── columns.txt │ ├── count.txt │ ├── data.bin │ ├── data.mrk3 │ ├── default_compression_codec.txt │ └── primary.idx table.json

以物化视图的内表为例:

{ "table": "test", "database": "default", "parts": { "default": [ # 存储策略对应的disk { "name": "all_1_1_0" } ] }, "query": "CREATE TABLE default.test UUID '30a3b4d8-bba0-4922-87ea-c6e416166018' (`id` String, `name` String) ENGINE = MergeTree ORDER BY id SETTINGS index_granularity = 8192", "size": { "default": 403 }, "total_bytes": 145, "metadata_only": false } metadata.json { "backup_name": "backup_test", # 备份文件名 "disks": { # 存储策略对应的disk,默认是default。 "default": "/data/bigdata/clickhouse/data/", "disk_name_1": "/data/bigdata/disks/disk1/", "disk_name_2": "/data/bigdata/disks/disk2/" }, "version": "2.1.3", "creation_date": "2023-01-11T09:09:58.363473551Z", "tags": "regular", "clickhouse_version": "v22.3.2.1-lts", "data_size": 403, "metadata_size": 368, "databases": [ { "name": "default", "engine": "Atomic", "query": "CREATE DATABASE default\nENGINE = Atomic" }, { "name": "test", "engine": "Atomic", "query": "CREATE DATABASE test\nENGINE = Atomic" } ], "tables": [ { "database": "default", "table": "test" } ], "functions": [], "data_format": "" } 上传数据到obs clickhouse-backup upload backup_name # 上传指定的备份文件

需要指定remote_storage为s3,同时配置s3的ak,sk等信息。 在执行clickhouse-backup upload backup_test后,在obs上可以看到上传的数据。 image.png 数据则会被压缩,命名方式为diskname_分区.tar image.png

目标节点下载数据 clickhouse-backup download

如:clickhouse-backup download backup_test 在config.xml指定的存储目录下会生成备份数据 image.png

恢复数据 clickhouse-backup restore

如:clickhouse-backup restore backup_test 恢复后,可以查询到数据已经同步完成。

进阶使用

前面已经讲了最基本的使用方式,也就是目标集群和源集群的所有配置都是一样的场景。但是,搬迁时,两个集群间往往有许多变量。针对特殊情况,现记录如下:

目标节点和源节点数据路径不一致

源节点的路径配置:

/data/bigdata/clickhouse/data/

目标节点的路径配置:

/data/bigdata/clickhouse/data1/

在源节点生成备份数据后,磁盘路径对应的是/data/bigdata/clickhouse/data/(对应的磁盘策略为default) test_path.json image.png metadata.json image.png 数据目录对应的磁盘策略为default image.png 将数据下载到目标节点后,需要适配上述三点。 下载后的备份数据在path对应的目录下,即:/data/bigdata/clickhouse/data1/ (1)适配table_name.json 因为目标节点的表用的磁盘策略也是default,所以不用修改 (2)适配metadata.json 修改存盘策略对应的路径为实际路径,如下图 image.png (3)适配数据目录 因为目标节点的表用的磁盘策略也是default,所以不用修改 适配后,restore操作,数据可以正常恢复。 image.png

表名变更

源节点表名 test_src 目标节点表名 test_dest backupname为backup_test_src 方法一: 在目标节点直接恢复数据,然后使用clickhouse的rename命令

clickhouse-backup restore backup_test_src # clickhouse sql rename table default.test_src to default.test_dest;

方法二: 如果目标节点已经存在该表,且表不能重建,则可以用如下方法 适配内容: (1)适配table_name.json a. 将test_src.json重命名为test_dest.json; b. 修改test_dest.json中的表名和uuid(uuid要填写实际的值,select uuid from system.tables where name =‘test_dest’;) image.png image.png (2)适配metadata.json image.png (3)适配数据目录 image.png 适配完上述后,可以正常恢复该表数据。

搬迁物化视图

源节点和目标节点的物化视图sql如下:

CREATE TABLE default.test_local ( `id` UInt8, `name` String, `xxx` String ) ENGINE = MergeTree ORDER BY id CREATE MATERIALIZED VIEW default.test_view ( `id` UInt8, `name` String, `xxx` String ) ENGINE = AggregatingMergeTree ORDER BY id SETTINGS index_granularity = 8192 AS SELECT id, name, xxx FROM ( SELECT * FROM default.test_local ) GROUP BY id, name, xxx

物化视图的数据迁移,应该搬迁它的inner表,因为数据都存储在inner表中。 注:inner表的关联关系: 如果有指定,则在建表语句中由TO关键字指定,如果没有指定,则默认是该物化视图对应的uuid(select uuid,name from system.tables where name=‘test_view’) 这里以不指定inner表的方式为例。 1、源节点数据备份 源节点的视图和inner的对应关系 image.png image.png 备份inner表

clickhouse-backup create -t default..inner_id.10f71dd6-c32b-4653-aee6-31cac394ae6d backup_test_view clickhouse-backup upload backup_test_view

2、目标节点恢复数据 在目标节点已经建立物化视图,对应的inner表为: image.png

clickhouse-backup download backup_test_view

(1)适配table_name.json a. 重命名table_name.json;

# 查询新名称 select metadata_path from system.tables where name='.inner_id.7238df78-039c-44d7-b238-df78039c24d7'; SELECT metadata_path FROM system.tables WHERE name = '.inner_id.7238df78-039c-44d7-b238-df78039c24d7' Query id: 85aa159d-7550-44f8-be27-b0d160839a47 ┌─metadata_path───────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┐ │ /data/bigdata/clickhouse/data/store/d56/d56f5c79-a22b-41c9-828b-d8582f9f8ac8/%2Einner_id%2E7238df78%2D039c%2D44d7%2Db238%2Ddf78039c24d7.sql │ └─────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

所以,重命名

mv /data/bigdata/clickhouse/data/backup/backup_test_view/metadata/default/%2Einner_id%2E10f71dd6%2Dc32b%2D4653%2Daee6%2D31cac394ae6d.json /data/bigdata/clickhouse/data/backup/backup_test_view/metadata/default/%2Einner_id%2E7238df78%2D039c%2D44d7%2Db238%2Ddf78039c24d7.json

b. 修改table_name.json中的表名和uuid image.png

(2)适配metadata.json image.png (3)适配数据目录

mv /data/bigdata/clickhouse/data/backup/backup_test_view/shadow/default/%2Einner_id%2E10f71dd6%2Dc32b%2D4653%2Daee6%2D31cac394ae6d /data/bigdata/clickhouse/data/backup/backup_test_view/shadow/default/%2Einner_id%2E7238df78%2D039c%2D44d7%2Db238%2Ddf78039c24d7

最后,恢复数据: image.png 这种方式与源节点数据完全一致。在物化视图的引擎为AggregatingMergeTree时,也能够保证两节点的数据完全一致。

多盘存储

如果源节点和目标节点都是多盘存储,且路径一致,则不需要额外适配。 如果源节点是default存储策略,目标节点是多盘存储,则需要按照前面的方法进行适配。 例子如下: 源节点只设置了path,目标节点设置了多盘存储

image.png 适配如下: (1)适配table_name.json a. 重命名table_name.json; 表名两边一致,不需要重命名 b. 修改table_name.json中的settings和存盘策略 image.png

(2)适配metadata.json 新增存盘策略 image.png

(3)适配数据目录

mkdir -p /data/bigdata/disks/disk1/backup/backup_test_default mv /data/bigdata/clickhouse/data/backup/backup_test_default/shadow /data/bigdata/disks/disk1/backup/backup_test_default/ mv /data/bigdata/disks/disk1/backup/backup_test_default/shadow/default/test_disk_default/default /data/bigdata/disks/disk1/backup/backup_test_default/shadow/default/test_disk_default/disk_name_1

如此操作,数据正常恢复。后续插入的数据也会在disk_name_1和disk_name_2间轮询写入。

增量搬迁

clickhouse-backup支持备份恢复某个分区的数据(不支持part级别),可以通过这种方式以达到增量搬迁的效果。 源节点中的数据内容如下:

select partition,partition_id,name from system.parts where database='default' and table ='test_partition' ┌─partition─┬─partition_id─────────────────────┬─name───────────────────────────────────┐ │ 1 │ 6711e2b2592d86d18fc0f260cf33ef2b │ 6711e2b2592d86d18fc0f260cf33ef2b_1_1_0 │ │ 2 │ d63c5d7a5ac187945961e06e17d46b6e │ d63c5d7a5ac187945961e06e17d46b6e_2_2_0 │ │ 2 │ d63c5d7a5ac187945961e06e17d46b6e │ d63c5d7a5ac187945961e06e17d46b6e_3_3_0 │ └───────────┴──────────────────────────────────┴────────────────────────────────────────┘

(1)备份某分区方式

# 源节点 clickhouse-backup create -t default.test_partition --partitions 6711e2b2592d86d18fc0f260cf33ef2b backup_test_p_1 clickhouse-backup create -t default.test_partition --partitions d63c5d7a5ac187945961e06e17d46b6e backup_test_p_2 clickhouse-backup upload backup_test_p_1 clickhouse-backup upload backup_test_p_2 # 目标节点 clickhouse-backup download backup_test_p_1 clickhouse-backup download backup_test_p_2 clickhouse-backup restore backup_test_p_1 clickhouse-backup restore --data backup_test_p_2 # 增量的要指定为data模式,否则原有数据会被覆盖

(2)备份整表,恢复部分分区方式

# 源节点 clickhouse-backup create -t default.test_partition backup_test_p clickhouse-backup upload backup_test_p # 目标节点 clickhouse-backup download backup_test_p clickhouse-backup restore --data --partitions 6711e2b2592d86d18fc0f260cf33ef2b backup_test_p # 指定需要恢复的分区 clickhouse-backup restore --data --partitions d63c5d7a5ac187945961e06e17d46b6e backup_test_p 缺陷

1、目前clickhouse-backup只支持MergeTree引擎系列的表



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有