首页 > 其他分享 >Clickhouse备份与恢复

Clickhouse备份与恢复

时间:2024-08-30 10:48:55浏览次数:9  
标签:恢复 备份 question data hot Clickhouse backup clickhouse

一、安装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: none
  backups_to_keep_local: 7 # 本地备份保留个数,默认0表示不自动做备份清理
  backups_to_keep_remote: 31 # 远程备份保留个数
clickhouse:
  username: default
  password: "XXXXXX"
  host: localhost
  port: 9000 # 这个与jdbc链接里的端口没关系,就是9000
  data_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、查看备份文件

clickhouse-backup list

image

6、删除备份文件

注意:删除时要考虑一下

clickhouse-backup delete local hot_question_data_bak_20240829

7、删除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

5、还原测试数据(可参考)

#创建库
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 /data/clickhouse/script
#编写自动备份脚本
vim /data/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 /data/clickhouse/script/ch_full_backup.sh

标签:恢复,备份,question,data,hot,Clickhouse,backup,clickhouse
From: https://www.cnblogs.com/reecelin/p/18388206

相关文章

  • 小米手机怎么把数据备份到电脑
      步骤1: 在设置中点击【我的设备】   步骤2: 进入页面后点击【备份与恢复】  步骤3: 在页面中选【电脑备份恢复】。  步骤4: 查看备份说明后点击【手机备份恢复】。 步骤5: 选择数据点击【立即备份】。......
  • MySQL 支持两种主要类型的备份方法:物理备份和逻辑备份。这两种备份方法各有优缺点,适用
    物理备份物理备份是指直接备份MySQL数据库的物理文件,包括数据文件、日志文件、配置文件等。物理备份通常分为冷备份(脱机备份)和热备份(联机备份)。冷备份(ColdBackup)定义: 在数据库完全停止的情况下进行的备份。特点:  简单快速,因为只需复制文件。可以在任何时间点进行。不需要锁......
  • 数据恢复丨恢复C盘误删的文件!含C盘瘦身方法
    C盘通常是计算机硬盘的一个分区,它在操作系统中扮演着非常重要的角色。为了避免C盘内存过多导致系统运行缓慢或不稳定,很多小伙伴会手动清理C盘,这就难以避免会不小心删除C盘中的文件。那么,C盘里的内容被删除了怎么恢复呢?!本文将详细介绍如何有效恢复C盘删除的文件,帮助大家轻松找......
  • 数据迁移新技能,MongoDB轻松同步至ClickHouse
    在当今数据驱动的世界中,企业的成功依赖于对数据的高效管理和精准分析。数据迁移是实现这些目标的关键环节,而选择合适的工具可以让这项工作变得更加轻松和高效。ETLCloud是一款创新的ETL(提取、转换、加载)工具,它提供了简单直观的界面和强大的功能,专门为现代数据集成挑战设计。它不......
  • 数据迁移新技能,MongoDB轻松同步至ClickHouse
    在当今数据驱动的世界中,企业的成功依赖于对数据的高效管理和精准分析。数据迁移是实现这些目标的关键环节,而选择合适的工具可以让这项工作变得更加轻松和高效。ETLCloud是一款创新的ETL(提取、转换、加载)工具,它提供了简单直观的界面和强大的功能,专门为现代数据集成挑战设计。它不......
  • Clickhouse 配置中文详细介绍 第一章 config.xml
    Clickhouse的配置太多且难以理解,花了两天逐步理解每个配置的作用并逐段机翻了一下注释,并增加了如何配置的建议<!--NOTE:Userandquerylevelsettingsaresetupin"users.xml"file.Ifyouhaveaccidentallyspecifieduser-levelsettingshere,serverwo......
  • 图形化(备份)
    GUI图形用户界面importjava.awt.Frame;publicclassExample01{publicstaticvoidmain(String[]args){//建立新窗体对象Framef=newFrame("我的窗体");//设置窗体的宽和高f.setSize(400,300);//设置窗体在屏幕中所......
  • 王道C语言(备份)
    指针与一维数组函数调用的本质是值传递数组传递是弱化为指针如果指针变量已指向数组中的一个元素,则p+1指向同一数组的下一个元素,执行p+1并不是将p的值(地址)加1,而是加上一个数组元素所占用的字节数。#include<stdio.h>intmain(){ inta[3]={2,7,8}; int*p; intj;......
  • Prometheus 告警恢复时,怎么获取恢复时的值?
    Prometheus告警事件中的$value表示当前告警触发时的值,但是在告警恢复时,Resolved事件中的$value仍然是最新告警时的值,并非是恢复时的值,这是什么原因和原理?是否有办法来解决呢?不废话,先说原理。原理告警规则是配置在prometheus.yaml中的,由Prometheus负责做规则判定。Pro......
  • C语言 备份
    scanf读取原理行缓冲:标准缓存区读入字符‘20\n’,会打印输出20,紧接着的scanf,会打印输出\n,标准输入缓冲区有\n,scanf(c=%c,&c),直接读取缓冲区的\n字符输出。scanf匹配规则:scanf函数在读取整型数、浮点数、字符串会忽略'\n'字符判断闰年#include<stdio.h>intmain(){ in......