使用clickhouse-backup迁移数据

作者:俊达

1 说明

上一篇文章中,我们介绍了clickhouse-backup工具。除了备份恢复,我们也可以使用该工具来迁移数据。
这篇文章中,我们提供一个使用clickhouse-backup做集群迁移的方案。

2 前置条件

1、源端和目标端网络联通,主机之间开启ssh免密登录

2、Clickhouse配置保持一致。

  • 集群名称一致
  • 节点配置参数保持一致
  • clickhouse版本一致

3、迁移后库表结构和源端保持一致

3 CK集群架构

在这里插入图片描述

1、源和目标集群的shard数量一样,shard对shard迁移。各个shard可并行进行备份恢复操作。
2、备份在源端每一个shard的第一个replica上执行。
3、表结构需要在目标shard的每一个节点上恢复。
4、数据只需要在目标shard的第一个节点上恢复。

3 操作步骤

全量

1、源端全量备份

clickhouse-backup --config config.yml create full_back_shard_i

2、将备份文件同步到目标服务器
同步到目标shard第一个节点

rsync -av /data/clickhouse/data/backup/full_back_shard_i root@remote:/data/clickhouse/data/backup

同步到目标shard其他节点
其他节点只需要同步metadata,不需要同步shadow目录下的数据文件。

rsync --exlude shadow -av /data/clickhouse/data/backup/full_back_shard_i root@remote:/data/clickhouse/data/backup

3、目标服务器恢复数据
(1)目标shard所有节点执行
加上–schema参数,建立表结构。

clickhouse-backup --config config.yml restore --rm --schema full_back_shard_i

(2)目标shard第一个节点执行
加上–data参数,加载数据。集群中的其他副本会从该节点同步数据。

clickhouse-backup --config config.yml restore --rm --data full_back_shard_i

增量

1、源端备份数据
指定create_remote,将增量数据上传到sftp

clickhouse-backup --config config.yml create_remote --diff-from=full_back_shard_i inc_backup_1

2、目标端恢复数据

通过restore_remote恢复数据

(1)目标shard所有节点执行
(如果表结构没有变化,这一个步骤可以忽略)

clickhouse-backup --config config.yml restore_remote --rm --schema inc_backup_1
clickhouse-backup --config config.yml delete local inc_backup_1

(2)目标shard第一个节点执行
增量恢复时也需要添加–rm参数,删除历史数据再做恢复。

clickhouse-backup --config config.yml restore_remote --rm --data inc_backup_1

关于rm选项
如果不加–rm,表中又有数据,默认情况下会忽略该表的恢复。从日志中可以看到类似信息:

2022/11/14 07:09:55.879763  warn local_15507.oracle_sql_stat2 skipped cause system.replicas entry already exists and replication in progress from another replica logger=clickhouse

如果恢复时不想先清空原有的数据(比如恢复某一个分区的数据),需要在config.yml中配置参数。

# config.yml
check_replicas_before_attach: false

# restore without rm option
clickhouse-backup --config config.yml restore --data partition_backup_i

这种情况下,如果restore命令执行多次,会导致数据重复。

4 基于分区的增量迁移

前置条件

若满足以下条件,可以使用基于分区的增量迁移

  • 全量数据已经恢复到目标shard
  • 表结构没有发生变化
  • 明确只存在部分分区存在数据变化

若选定的分区数据量相对所有数据占比不高,基于分区的增量迁移能提高迁移效率。

具体步骤如下:

1、源端备份分区数据
在源端shard第一个replica执行

clickhouse-backup --config config.yml create --partitions=xxx partition_backup_i

2、将备份文件rsync到目标shard第一个节点

rsync -av /data/clickhouse/data/backup/partition_backup_i root@remote:/data/clickhouse/data/backup

3、目标shard清空对应分区的数据
在目标分区第一个replica执行

for tab in tabs
do
    clickhouse-client --password=xx --database=xx --query="alter table $tab drop partition 'partion-xx'";
done

4、恢复数据
在目标shard的第一个replica上执行

clickhouse-backup --config config.yml restore --partitions=xxx --data partition_backup_i

加上–data参数

不能加–rm参数

注意config.yml需要配置check_replicas_before_attach: false。

#config.yml
clickhouse:
  username: default
  password: "hello123"
  host: localhost
  port: 9000
  ...
  check_replicas_before_attach: false

恢复命令不能重复执行。若要执行,需要先清空partition内已有的数据。

更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw

相关推荐

  1. sqlserver->clickhouse迁移数据

    2024-04-20 20:26:08       57 阅读
  2. zookeeper数据迁移clickhouse-keeper

    2024-04-20 20:26:08       37 阅读
  3. clickhouse数据迁移到starrocks踩坑记录

    2024-04-20 20:26:08       59 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-20 20:26:08       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-20 20:26:08       100 阅读
  3. 在Django里面运行非项目文件

    2024-04-20 20:26:08       82 阅读
  4. Python语言-面向对象

    2024-04-20 20:26:08       91 阅读

热门阅读

  1. 习题4-1 求奇数和

    2024-04-20 20:26:08       34 阅读
  2. 数据结构与算法:常用的启发式算法

    2024-04-20 20:26:08       34 阅读
  3. 解决向MySQL中导入文件中的 数据时出现的问题~

    2024-04-20 20:26:08       27 阅读
  4. 2024/4/19 MySQL索引结构

    2024-04-20 20:26:08       36 阅读
  5. MySQL 解压版安装后忘记密码如何处理

    2024-04-20 20:26:08       30 阅读
  6. 【力扣 | 分享】高频 SQL 50 题(基础版)

    2024-04-20 20:26:08       26 阅读
  7. 完全平方数

    2024-04-20 20:26:08       31 阅读
  8. excel试题转word格式

    2024-04-20 20:26:08       37 阅读
  9. 【torch学习】torch.utils.data

    2024-04-20 20:26:08       38 阅读
  10. OWASP发布十大开源软件安全风险清单

    2024-04-20 20:26:08       36 阅读
  11. Prompt学习笔记(一)

    2024-04-20 20:26:08       37 阅读
  12. Kafka

    2024-04-20 20:26:08       31 阅读