使用clickhouse-backup备份和恢复数据

作者:俊达

介绍

clickhouse-backup是altinity提供的一个clickhouse数据库备份和恢复的工具,开源项目地址:https://github.com/Altinity/clickhouse-backup

功能上能满足日常数据库备份恢复的需求:

  • 支持单表/全库备份
  • 支持备份上传到S3/FTP等存储
  • 支持单表/全库恢复

本文对备份工具的使用做一些介绍。

clickhouse-backup工具介绍

clickhouse-backup命令行

可以使用clickhouse-backup命令行工具进行备份和恢复操作。使用clickhoues-backup有几个前提条件

  • 需要能访问clickhoues的数据目录(如/var/lib/clickhoues, 在docker或k8s环境中,需要将数据卷挂载到同样的路径)
  • 需要有clickhouse账号,能访问clickhouse服务,执行一些sql
  • 可以使用参数文件进行配置,默认在/etc/clickhouse-backup/config.yml

命令行参数:

clickhouse-backup
NAME:clickhouse-backup - Tool for easy backup of ClickHouse with cloud supportUSAGE:clickhouse-backup <command> [-t, --tables=<db>.<table>] <backup_name>VERSION:1.3.2DESCRIPTION:Run as 'root' or 'clickhouse' userCOMMANDS:tables          Print list of tablescreate          Create new backupcreate_remote   Create and uploadupload          Upload backup to remote storagelist            Print list of backupsdownload        Download backup from remote storagerestore         Create schema and restore data from backuprestore_remote  Download and restoredelete          Delete specific backupdefault-config  Print default configprint-config    Print current configclean           Remove data in 'shadow' folder from all `path` folders available from `system.disks`server          Run API serverhelp, h         Shows a list of commands or help for one commandGLOBAL OPTIONS:--config FILE, -c FILE  Config FILE name. (default: "/etc/clickhouse-backup/config.yml") [$CLICKHOUSE_BACKUP_CONFIG]--help, -h              show help--version, -v           print the version

命令行参数比较直观,

  • print-config: 打印当前配置
  • default-config: 打印默认配置
  • create: 创建备份
  • create_remote: 创建备份,并上传到指定存储
  • restore:创建表结构,恢复数据
  • restore_remote: 下载备份文件,恢复数据
  • list:列出备份集
  • download:下载备份集
  • delete:删除备份集
  • server:启动服务。外部可以使用api方式发起备份、恢复任务。适合在容器化环境中使用。

clickhouse-backup 工作机制(k8s)

可以通过命令行的方式使用clickhouse-backup。

如果clickhouse server运行在k8s中,可以开启clickhouse-backup server模式,将clickhouse-backup和clickhouse-server运行在同一个pod中,便于访问数据目录。

整体架构如下图:
在这里插入图片描述

上图中的文件操作,除上传下载外,都是使用了硬连接(hard link)的方式,效率很高,也不会占用大量额外的磁盘空间。

clickhouse-backup也支持增量备份。增量备份通过对比2次全量备份产生的part文件来实现。只在将文件上传到remote存储时进行(create_remote, upload),才会进行增量文件对比,恢复一个增量备份时,会以递归的方式下载对应的基础备份。

备份流程

数据备份的步骤大致如下:

1、获取需要备份的表的列表、表的相关元数据(如show create table)。
2、对每一个需要备份的表,使用alter table freeze命令创建表的一个快照
3、将步骤2创建的快照文件,move到backup目录。由于在同一个文件系统,move通常很快。
4、如果需要上传,处理文件上传。

数据恢复流程

数据恢复的步骤和备份的步骤相反

1、创建表结构(使用备份过程中生成的建表语句)
2、如果需要,下载备份文件
3、将文件move到clickhouse 相关表的detatched目录
4、执行alter table attach part命令,将数据恢复到表中。

clickhouse-backup api

clickhouse-backup server开启api服务。可以通过调用api来发起备份/恢复。

# clickhouse-backup server
2022/05/06 16:12:50.845160  info Starting API server on localhost:7171
2022/05/06 16:12:50.869711  info Update last backup size metrics start (onlyLocal=false)
2022/05/06 16:12:50.906673  info SELECT value FROM `system`.`build_options` where name='VERSION_INTEGER'
2022/05/06 16:12:50.921257  info SELECT * FROM system.disks;
2022/05/06 16:12:50.934209  info Update last backup size metrics finish duration=64ms
root@node1:~# curl localhost:7171
Documentation: https://github.com/AlexAkulov/clickhouse-backup#api-configuration
/
/
/backup/tables
/backup/tables/all
/backup/list
/backup/list/{where}
/backup/create
/backup/clean
/backup/upload/{name}
/backup/download/{name}
/backup/restore/{name}
/backup/delete/{where}/{name}
/backup/status
/backup/actions
/backup/actions

Intergration tables
配置文件中开启create_integration_tables,会在system库中创建backup_actions、backup_list表

## /etc/clickhouse-backup/config.ymlapi:listen: localhost:7171enable_metrics: trueenable_pprof: falseusername: ""password: ""secure: falsecertificate_file: ""private_key_file: ""create_integration_tables: trueallow_parallel: false

backup_actions

CREATE TABLE system.backup_actions
(`command` String,`start` DateTime,`finish` DateTime,`status` String,`error` String
)
ENGINE = URL('http://127.0.0.1:7171/backup/actions', 'JSONEachRow')
SETTINGS input_format_skip_unknown_fields = 1

backup_list

CREATE TABLE system.backup_list
(`name` String,`created` DateTime,`size` Int64,`location` String,`required` String,`desc` String
)
ENGINE = URL('http://127.0.0.1:7171/backup/list', 'JSONEachRow')
SETTINGS input_format_skip_unknown_fields = 1

这是2个URL存储引擎的表。
往backup_actions表写入数据,就会调用clickhouse-backup server对应的借口,发起备份任务。
查询backup_list表,可以获取到备份列表。

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

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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【opencv】示例-grabcut.cpp 使用OpenCV库的GrabCut算法进行图像分割

left mouse button - set rectangle SHIFTleft mouse button - set GC_FGD pixels CTRLleft mouse button - set GC_BGD pixels 这段代码是一个使用OpenCV库的GrabCut算法进行图像分割的C程序。它允许用户通过交互式方式选择图像中的一个区域&#xff0c;并利用GrabCut算法尝试…

Tomcat无法成功启动——双击startup.bat闪退的解决办法

一、首先查看端口是否被占用了&#xff0c;一般Tomcat的默认端口是8080&#xff0c;可以在管理员命令行通过“netstat -ano|findstr "8080”"的命令查看当前是否有进程占用了端口。 1.如果端口占用了&#xff1a; 则根据PID&#xff08;进程id号&#xff09;来查这个…

深入理解Apache ZooKeeper与Kafka的协同工作原理

目录 引言 一、ZooKeeper基础概念 &#xff08;一&#xff09;ZooKeeper简介 &#xff08;二&#xff09;ZooKeeper数据结构 &#xff08;三&#xff09;ZooKeeper特点 &#xff08;四&#xff09;应用场景 二、ZooKeeper工作模式 &#xff08;一&#xff09;工作机制 …

jeecg-boot安装

我看大家都挺关注&#xff0c;所以集中上传了下代码和相关工具&#xff0c;方便大家快速完成 链接&#xff1a;https://pan.baidu.com/s/1-Y9yHVZ-4DQFDjPBWUk4-A 提取码&#xff1a;op1r 1. 下载代码 下载地址 : JEECG官方网站 - 基于BPM的低代码开发平台(低代码平台_零代…

Let‘s Encrypt

创建文件夹 mkdir /usr/local/develop/ 安装Certbot客户端 yum install certbot 首先确保example.com和www.example.com这两个域名通过DNS解析绑定了你的web 服务器的公网 IP 就是说先要完成域名解析到服务器 下面命令会验证 /var/www/example 他会将一些命令文件存在…

MySQL 04-EMOJI 表情与 UTF8MB4 的故事

拓展阅读 MySQL View MySQL truncate table 与 delete 清空表的区别和坑 MySQL Ruler mysql 日常开发规范 MySQL datetime timestamp 以及如何自动更新&#xff0c;如何实现范围查询 MySQL 06 mysql 如何实现类似 oracle 的 merge into MySQL 05 MySQL入门教程&#xff0…

SpringBoot + Dobbo + nacos

SpringBoot Dobbo nacos 一、nacos https://nacos.io/zh-cn/docs/quick-start.html 1、下载安装包 https://github.com/alibaba/nacos/releases/下载后在主目录下&#xff0c;创建一个logs的文件夹&#xff1a;用来存日志 2、启动nacos 在bin目录下打开cmd运行启动命令&a…

当你的项目体积比较大?你如何做性能优化

在前端开发中&#xff0c;项目体积优化是一个重要的环节&#xff0c;它直接影响到网页的加载速度和用户体验。随着前端项目越来越复杂&#xff0c;引入的依赖也越来越多&#xff0c;如何有效地减少最终打包文件的大小&#xff0c;成为了前端工程师需要面对的挑战。以下是一些常…

3D应用模型信创系统实时渲染有什么要求?

实时云渲染技术是数字孪生领域&#xff0c;比较常用的轻量化软件交付方式&#xff0c;该技术是将3D应用等大模型的算力执行放在了服务器端&#xff0c;而服务器目前比较常用的还是Windows系统。但随着国产信创在数字孪生领域应用越来越多&#xff0c;实时云渲染平台的国产信创化…

【vue】购物车案例优化

对 购物车案例 进行优化 用watch实现全选/取消全选用watch实现全选状态的检查用computed计算总价格 <!DOCTYPE html> <html lang"en"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-w…

【高效开发工具系列】obsutil安装与使用

&#x1f49d;&#x1f49d;&#x1f49d;欢迎来到我的博客&#xff0c;很高兴能够在这里和您见面&#xff01;希望您在这里可以感受到一份轻松愉快的氛围&#xff0c;不仅可以获得有趣的内容和知识&#xff0c;也可以畅所欲言、分享您的想法和见解。 推荐:kwan 的首页,持续学…

Day98:云上攻防-云原生篇K8s安全Config泄漏Etcd存储Dashboard鉴权Proxy暴露

目录 云原生-K8s安全-etcd(Master-数据库)未授权访问 etcdV2版本利用 etcdV3版本利用 云原生-K8s安全-Dashboard(Master-web面板)未授权访问 云原生-K8s安全-Configfile鉴权文件泄漏 云原生-K8s安全-Kubectl Proxy不安全配置 知识点&#xff1a; 1、云原生-K8s安全-etcd未…

ubuntu 20.04 设置国内镜像源(阿里源、清华源)

在网上搜了好多设置国内镜像源&#xff0c;都写的乱七八糟的&#xff0c;都是随便换&#xff0c;最后还是换得一堆问题。 镜像源也是跟版本一一对应的&#xff0c;不能随便一个国内源就还过去用&#xff0c;否则会出现各种各样的问题&#xff0c;我也是吃过亏之后才发现的。 国…

循序渐进丨MogDB 数据库带级联从库的集群切换后如何保持原有架构?

生产数据库运行过程中可能会涉及到升级或者打补丁&#xff0c;导致各节点的角色有计划的发生改变。如果集群内角色发生改变&#xff0c;是否还能保持原有架构继续对外提供服务呢&#xff1f;我们来做一下测试。 采用22模式模拟同城两机房部署4节点 MogDB 数据库集群&#xff0c…

软考 — 系统架构设计师 - 嵌入式真题

问题1&#xff1a; 可靠度表示系统在规定条件下&#xff0c;规定的时间内不发生失效的概率。 失效率表示系统运行到此时从未出现失效的情况下&#xff0c;单位时间内系统出现失效的概率 问题 2&#xff1a; 动态冗余又称为主动冗余&#xff0c;通过故障检测&#xff0c;故障定…

WSL访问adb usb device

1.Windows上用PowerShell运行&#xff1a; winget install --interactive --exact dorssel.usbipd-win 2.在WSLUbuntu上终端运行&#xff1a; sudo apt install linux-tools-generic hwdata sudo update-alternatives --install /usr/local/bin/usbip usbip /usr/lib/linux-too…

ChatGPT加持,需求分析再无难题

简介 在实际工作过程中&#xff0c;常常需要拿到产品的PRD文档或者原型图进行需求分析&#xff0c;为产品的功能设计和优化提供建议。 而使用ChatGPT可以很好的帮助分析和整理用户需求。 实践演练 接下来&#xff0c;需要使用ChatGPT 辅助我们完成需求分析的任务 注意&…

【2024年认证杯】A题详细思路+数据(来源)+成品论文+模型代码(matlab+python)

2024年认证杯A题 解题思路 ⭐⭐第一问题分析第二问题分析第三问题分析 数据与数据来源&#x1f389;&#x1f389;指标解释数据来源 成品参考论文&#x1f60a;&#x1f60a;python/ matlab 代码&#x1f680;&#x1f680; 解题思路 ⭐⭐ 这个题目要求我们围绕人造保暖纤维的…

linux学习:标准IO

目录 接口 打开文件 关闭文件 读写 每次一个字符的读写标准 IO 函数接口 每次一行的读写标准 IO 函数接口 每次读写若干数据块的标准 IO 函数接口 获取或设置文件当前位置偏移量 标准格式化 IO 函数 系统 IO 的最大特点一个是更具通用性&#xff0c;不管是普通文件、管…

mac上如何安装python3

mac上如何安装python3&#xff1f; 安装homebrew 在终端执行命令 /usr/bin/ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" 执行完成后&#xff0c;homebrew和pip等工具就自动安装好了。 接下来安装python3.在终端…