Clickhouse备份与恢复

news/2024/11/18 20:25:35/文章来源:https://www.cnblogs.com/reecelin/p/18388206

一、安装clickhouse-backup

1、下载安装包

cd /server/tools
wget https://github.com/Altinity/clickhouse-backup/releases/download/v2.4.33/clickhouse-backup-linux-amd64.tar.gz

2、创建存放clickhouse-backup的目录,并解压

mkdir -pv /data/clickhouse-backup
tar xvf clickhouse-backup-linux-amd64.tar.gz -C /data/clickhouse-backup/

3、创建软连接

ln -sv /data/clickhouse-backup/build/linux/amd64/clickhouse-backup /usr/local/bin

4、测试clickhouse-backup命令

clickhouse-backup -v

image

5、创建配置文件

注意:下面的配置文件是按本地标准来的,配置文件中默认data_path:"/var/lib/clickhouse",如果clickhouse-server存储数据的路径变了,这个地方也需要加上data_path。下面举个例子:

image

image

然后编辑clickhouse-backup的config文件

mkdir -p /etc/clickhouse-backup/
cd /etc/clickhouse-backup/
vim config.yml

输入下面的内容:

general:remote_storage: nonebackups_to_keep_local: 7 # 本地备份保留个数,默认0表示不自动做备份清理backups_to_keep_remote: 31 # 远程备份保留个数
clickhouse:username: defaultpassword: "XXXXXX"host: localhostport: 9000 # 这个与jdbc链接里的端口没关系,就是9000data_path: "/data/iflytek/public/clickhouseData" #clickhouse的数据的实际存储位置

image

二、自动备份数据

1、查看可备份的表

clickhouse-backup tables

例如:

image

2、单表备份

语法:

clickhouse-backup create [-t, --tables=<db>.<table>] <backup_name>

备份default库中的hot_question_data表,备份名称默认为时间戳,可手动指定备份名称。例如:

clickhouse-backup create  -t default.hot_question_data hot_question_data_bak_20240829

image

备份存储在中 $data_path/backup 下(默认在/var/lib/clickhouse/backup)

image

备份包含两个目录:

  • metadata目录: 包含重新创建所需的DDL SQL
  • shadow目录: 包含作为ALTER TABLE … FREEZE操作结果的数据。

image

3、备份多表

备份test库中的t_order表和t_new表(两个表用","隔开)

clickhouse-backup create -t default.hot_question_data_bak20240723,default.hot_question_data_bak20240725 hot_question_data_bak20240723_0725_bak20240829

image

image

4、全库备份

clickhouse-backup create ch_bk_20240308

5、备份到远程对象存储(例如s3)

(1)修改配置文件

vim /etc/clickhouse-backup/config.yml #添加下面内容,参数根据自己情况填写

s3:access_key:   <AWS访问密钥>secret_key:   <AWS SECRET KEY>bucket:   <存储桶BUCKET名称>region: us-east-1path: "/some/path/in/bucket"  <备份路径>
(2)上传备份(upload)
clickhouse-backup upload 2024-03-08T07-32-37

注意:使用clickhouse-backup upload 上传备份可以使用参数 --diff-from

将文件与以前的本地备份进行比较,仅上载新的/更改的文件。

必须保留先前的备份,以便从新备份中进行还原

(3)下载备份(download)
clickhouse-backup download 2024-03-08T07-32-37

6、查看备份文件

clickhouse-backup list

image

7、删除备份文件

注意:删除时要考虑一下

clickhouse-backup delete local 2024-03-08T07-32-37

8、删除shadow下的临时备份文件

注意:删除时要考虑一下

clickhouse-backup  clean

三、(自动备份数据)数据恢复

1、语法:

clickhouse-backup restore 备份名

重要选项

  • –table 只恢复特定表,可以用正则(如还原指定数据库:–table=dbname.*)
  • –schema 只还原表结构
  • –data 只还原数据

例如:

clickhouse-backup create -t default.hot_question_data_bak20240722 hot_question_data_bak20240722_20240829

image

查看备份是否生成
image

将 default.hot_question_data_bak20240722 这张表备份一份,将这张表删除

image

刷新确认是否删除成功
image

然后进行恢复

clickhouse-backup restore hot_question_data_bak20240722_20240829

image

此时报错:

2024/08/29 20:38:00.929372 error can't create table `default`.`hot_question_data_bak20240722`: code: 57, message: Directory for table data store/e8c/e8c3a343-758d-4e9a-a8c3-a343758dce9a/ already exists after 1 times, please check your schema dependencies

解决方法
data_path/backup/hot_question_data_bak20240722_20240829/metadata/default/hot_question_data_bak20240722.json中的UUID 'e8c3a343-758d-4e9a-a8c3-a343758dce9a’,这一整个删除掉,重新执行clickhouse-backup restore 备份名

删除之前:
image

删除之后:
image

重新执行恢复命令,发现表又复原回来了。
image

2、全库恢复

参考单表恢复,执行命令即可:

clickhouse-backup restore /var/lib/clickhouse/backup/备份名  #需要保证原来的库完全被删除,否则可能会报错,默认会去/var/lib/clickhouse/backup路径下去找备份文件夹

如果遇到报错,Directory for table data store/e8c/e8c3a343-758d-4e9a-a8c3-a343758dce9a/ already exists after 1 times,参考单表恢复的解决方案即可。

3、只恢复表结构

#使用 --schema 恢复表的表结构
clickhouse-backup restore 备份名 --table 库名.表名  --schema

4、只恢复数据

注意:由于是ATTACH PARTITION操作,如果执行2次的话,数据会翻倍

#用 --data 恢复表中数据(注意:由于是ATTACH PARTITION操作,如果执行2次的话,数据会翻倍)
clickhouse-backup restore 备份名 --table 库名.表名  --data

还原测试数据(可参考)

#创建库
create database if not exists test;
#创建表
create table if not exists test.t_order
(id Int64 COMMENT '订单id', datetime DateTime COMMENT '订单日期',name String COMMENT '手办名称',price Decimal32(2) COMMENT '手办价格',user_id Int64 COMMENT '用户id'
) engine = MergeTree 
partition by toYYYYMM(datetime)
order by id ;
#插入数据
insert into t_order values (1, '2022-03-08 12:40:00', '欧阳锋', 999.99, 202203080001)
insert into t_order values (2, '2023-03-08 12:44:00', '梅超风', 1111, 202303080002)
insert into t_order values (3, '2022-03-08 12:45:00', '黄蓉', 8989, 202203080001)
#用全库备份先预留一份,再进行下面操作:
#删除数据
alter table t_order delete where id = 2;
#清空表
truncate table t_order;
#删除表
drop table t_order;
#删除库
drop database test;

四、编写shell脚本设置定时任务

1、自动备份脚本

#创建存放脚本的目录
mkdir -pv /var/lib/clickhouse/script
#编写自动备份脚本
#vim /var/lib/clickhouse/script/ch_full_backup.sh
#!/bin/bash
/usr/local/bin/clickhouse-backup create ch_full_backup_`date +%Y-%m-%dT%H-%M-%S`

image

2、设置定时任务

#每天凌晨1点进行备份
0 1 * * * sh /var/lib/clickhouse/script/ch_full_backup.sh

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

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

相关文章

AES加密算法

AES是个对称加密。AES支持三种长度的秘钥:128位(16字节),192位(24字节),256位(32字节)。加密由N轮构成,轮数依赖于密钥长度:16字节密钥对应10轮,24字节密钥对应12轮,32字节对应14轮。 AES为分组密码,分组密码也就是把明文分成一组一组的,每组长度相等,每次加密…

记一个小杂症

【问题描述】ZPA047_EDH 黑名单中间表查询报表,点击运行就回到初始界面 打断点又能进来, 【原因】 事务码类型 应该为报表事物 本人常年接收SAP运维和远程项目,ECC,S/4HANA,CRM,WDA. 远程人天可谈,终身售后,有活请联系V信:18925782767(问问题免费,欢迎交流!) !!…

.NET 开源报表神器 Seal-Report

前言 Seal-Report 是一款.NET 开源报表工具,拥有 1.4K Star。它提供了一个完整的框架,使用 C# 编写,最新的版本采用的是 .NET 8.0 。 它能够高效地从各种数据库或 NoSQL 数据源生成日常报表,并支持执行复杂的报表任务。 其简单易用的安装过程和直观的设计界面,我们能够在几…

从买车、提车,到用车(一整套流程记录,18页PPT)

背景最近有些公司的同事准备买车,捞出了以前写的PPT分享给了他,也考虑在博客放一下2年前写的PPT,希望对车子没有概念的网友们童鞋有个简单的但是必要的流程了解。 以下是18页PPT内容,如果转载请注明出处:https://www.cnblogs.com/xiefengdaxia123

MDST150-16-ASEMI机床专用整流模块MDST150-16

MDST150-16-ASEMI机床专用整流模块MDST150-16编辑:ll MDST150-16-ASEMI机床专用整流模块MDST150-16 型号:MDST150-16 品牌:ASEMI 封装:MDST 批号:2024+ 分类:整流模块 特性:整流模块、整流桥 平均正向整流电流(Id):150A 最大反向击穿电压(VRM):1600V 恢复时间:>…

最强图片预览工具 JPEGView 关闭自动全屏模式

窗口右键 → 设定/管理 → 编缉用户设置:最强图片预览工具JPEGView 关闭自动全屏模式 搜索ShowFullScreen 并设置为false: ; ----------------------------------------------- ; - WINDOW BEHAVIOR OPTIONS ; -----------------------------------------------; Start in fu…

线性规划单纯形法精解

单纯形法(Simplex Method)是解决线性规划问题的一种高效且广泛使用的算法。由乔治丹齐克(George Dantzig)在20世纪40年代提出,这一方法通过系统地检查可行解空间的极点,从而找到最优解。由于其计算效率高,单纯形法迅速成为线性规划问题中最重要和最常用的算法之一。它的…

LOTO示波器统计曲线和故障分析pass/fail测试

LOTO示波器统计曲线和故障分析pass/fail测试 虚拟示波器可以应用在工业自动化检测中,除了常规的检测波形和测量值参数以外,由多个行业客户定制和验证的统计曲线和故障分析(pass/fail)功能也为工业自动化检测带来极大的便利。(一)故障分析(pass/fail)的基础:统计曲线功…

小米手机怎么把数据备份到电脑

步骤1: 在设置中点击【我的设备】 步骤2: 进入页面后点击【备份与恢复】 步骤3: 在页面中选【电脑备份恢复】。 步骤4: 查看备份说明后点击【手机备份恢复】。 步骤5: 选择数据点击【立即备份】。python,go,redis,mongodb,.net,C#,F#,服务器架构

vscode-snippets,教你一个#include打出所有所需代码

你甚至可以在后面加上早苗。前言 之前在打cf之类的比赛的时候总能看到别人的代码最开始总是一大串的火车头,相信也有人和我一样很喜欢这样的火车头,喜欢这样的风格化代码(别人能不能看懂是另外一回事)。但是每次复制粘贴这些火车头就很麻烦,有没有什么办法能一键打出火车头…

OceanBase-OCP-【告警】-OCP频繁出现主机不可用告警

一、先说,处理过程OCP频繁出现主机不可用告警 -------------------------------------------------- 一、环境 生产环境,监控9个节点,fgc、内存、OCP各个节点网络、NTP都是正常。 云平台底座 3.14-3.16.2,客户ocp是3.1.2-20211025说是升级完ocp会到3.2.4,客户OCP 1-1-1 集…

OceanBase-OCP-bug之 fgc问题处理

一、遇到问题时,处理过程关于调整ocp-server的jvm大小解释:1、在docker容器内设置export JVM_HEAP_SIZE=xxxx,然后重启对应的ocp-server进程(/home/admin/ocp-server/bin/ocp-server),注意这里的大小不要超过docker容器的大小上限。2、在调整完ocp容器的内存大小之后(doc…