使用clickhouse-backup迁移数据

news2024/11/28 22:53:12

作者:俊达

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1603380.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

vscode 配置go环境

https://www.zhihu.com/question/486786946/answer/2723663432 注意一定要安装最新版,否则不容易debug //main.go package main //说明hello.go这个文件在main这个包中import "fmt" //导入内置包,可以使用其中函数等func main() {fmt.Println("Hello…

微信小程序的常用API ①

前言:什么是微信小程序的API? (1)微信小程序的API是由宿主环境提供的。通俗来说API是一种接口函数,把函数封装起来给开发者使用,这样好多功能都无需开发者去实现,直接调用即可。 (…

真有立即做出40+BI零售数据分析报表的方案?

有,奥威BI零售数据分析方案是一套标准化的BI方案,预设零售数据分析模型和BI报表,点击应用后,将自动从系统中取数,并根据方案的预设计算分析指标、分析数据,并生成让人快速理解数据情况的BI数据可视化报表。…

javaweb http

1、http简介 HTTP 超文本传输协议(HTTP-Hyper Text transfer protocol),是一个属于应用层的面向对象的协议,由于其简捷、快速的方式,适用于分布式超媒体信息系统。它于1990年提出,经过十几年的使用与发展&…

npm ERR! code CERT_HAS_EXPIRED (创建vue过程)

npm ERR! code CERT_HAS_EXPIRED (创建vue过程) 起因:卸载 npm uninstall -g vue-cli时候发现报这个错误。 当我们创建vue之前,使用npm更新或者安装啥的时,出现此类提示,则表明,用来验证和网络加…

使用GAN做图像超分——SRGAN,ESRGAN

在GAN出现之前,使用的更多是MSE,PSNR,SSIM来衡量图像相似度,同时也使用他们作为损失函数。 但是这些引以为傲的指标,有时候也不是那么靠谱: MSE对于大的误差更敏感,所以结果就是会倾向于收敛到期望附近&am…

《Kubernetes部署篇:基于Kylin V10+ARM架构CPU+外部etcd使用containerd部署K8S 1.26.15容器版集群(一主多从)》

总结:整理不易,如果对你有帮助,可否点赞关注一下? 更多详细内容请参考:企业级K8s集群运维实战 1、在当前实验环境中安装K8S1.25.14版本,出现了一个问题,就是在pod中访问百度网站,大…

使用嘉立创EDA打开JSON格式的PCB及原理图

一、将PCB和原理图放同一文件夹 并打包成.zip文件 二、打开嘉立创EDA并导入.zip文件 文件 -> 导入 -> 嘉立创EDA标准版/专业版 三、选择.zip文件并选择 “导入文件并提取库” 四、自定义工程路径 完成导入并转换为.eprj文件 五、视频教学 bilibili_使用立创EDA打开JSO…

Ansible 提示 sshpass 错误

错误的信息为: AILED! > {"msg": "to use the ssh connection type with passwords or pkcs11_provider, you must install the sshpass program"}问题和原因 这是在运行 ansible 的服务器需要安装 sshpass 组件。 可以直接运行&#xff1…

Xamarin.Android中“ADB0020: Android ABI 不匹配。你正将应用支持的“armeabi-v7a;arm64-v8a”异常处理

这里写自定义目录标题 1、问题2、解决 1、问题 在Xamarin.Android中出现ADB0020: Android ABI 不匹配。你正将应用支持的“armeabi-v7a;arm64-v8a”ABI 部署到 ABI“x86_64;x86”的不兼容设备。应创建匹配其中一个应用 ABI 的仿真程序,或将“x86_64”添加到应用生成…

web自动化系列-selenium 的鼠标操作(十)

对于鼠标操作 ,我们可以通过click()方法进行点击操作 ,但是有些特殊场景下的操作 ,click()是无法完成的 ,比如 :我想进行鼠标悬停 、想进行鼠标拖拽 ,怎么办 ? 这个时候你用click()是无法完成的…

论文解读:(CoOp)Learning to Prompt for Vision-Language Models

文章汇总 存在的问题 虽然训练类别通常具有文本形式,例如“金鱼”或“卫生纸”,但它们将被转换为离散标签,只是为了简化交叉熵损失的计算,从而使文本中的语义封装在很大程度上未被利用。这样的学习范式将视觉识别系统限制在闭集…

【C++题解】1565. 成绩(score)

问题:1565. 成绩(score) 类型:基本运算、小数运算 题目描述: 牛牛最近学习了 C 入门课程,这门课程的总成绩计算方法是: 总成绩作业成绩 20% 小测成绩 30% 期末考试成绩 50%。 牛牛想知道&am…

CSS简介与CSS选择器

目录 CSS简介 CSS语法规范 HTML引入CSS的方式 行内样式表 内部样式表 外部样式表 CSS选择器 CSS基础选择器 标签选择器 类选择器 单类名选择器 多类名选择器 id选择器 id选择器的使用 id选择器和类选择器的区别 通配符选择器 基础选择器总结 CSS简介 CSS 是层…

无风扇嵌入式车载电脑在矿山车辆行业应用

矿山车辆行业应用 背景介绍 现代的采矿业面临许多的挑战,其中最重要的就是安全性的问题,无论在矿井下或地面上的工作,都必须确保员工的安全保障。因此,先进的矿车必须整合专用的车载电脑,在极其恶劣的采矿环境中稳定运…

Python 数据结构和算法实用指南(三)

原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d 译者:飞龙 协议:CC BY-NC-SA 4.0 第七章:哈希和符号表 我们之前已经看过数组和列表,其中项目按顺序存储并通过索引号访问。索引号对计算机来说很有效…

SQLite作为应用程序文件格式(二十八)

返回:SQLite—系列文章目录 上一篇:SQLite数据库中JSON 函数和运算符(二十七) 下一篇:SQLite—系列文章目录 摘要 具有定义架构的 SQLite 数据库文件 通常是一种出色的应用程序文件格式。 以下是十几个原因: 简化的应用程序开发单文…

Spring Cloud Gateway集成聚合型Spring Boot API发布组件knife4j,增强Swagger

大家都知道,在前后端分离开发的时代,前后端接口对接是一项必不可少的工作。 可是,作为后端开发,怎么和前端更好的配合,才能让自己不心累、脑累,直接扔给前端一个后端开放api接口文档或者页面,让…

Spark/SparkSQL读取Hadoop LZO文件概述

一、前置配置 IDEA Maven安装配置 Scala(可选) Java Hadoop.dll(可能需要,具体看有无相关错误信息) hadoop-lzo-0.xx.xx.jar(如果你的版本过高,需要到官网下载高版本,mvnrepository仓…

Elasticsearch:如何将 MongoDB 数据引入 Elastic Cloud

作者:Hemendra Singh Lodhi Elastic Cloud 是由 Elastic 提供的基于云的托管服务。Elastic Cloud 允许客户在亚马逊网络服务 (AWS)、谷歌云平台 (GCP) 和微软 Azure 上部署、管理和扩展他们的 Elasticsearch 集群。 MongoDB 是一种流行的 NoSQL 文档导向数据库&am…