美文网首页
ClickHouse备份恢复

ClickHouse备份恢复

作者: 这货不是王马勺 | 来源:发表于2023-10-18 17:58 被阅读0次

官网说明

参考官网:

https://clickhouse.com/docs/zh/operations/backup

不同公司有不同的可用资源和业务需求,因此不存在一个通用的解决方案可以应对各种情况下的ClickHouse备份和恢复。 适用于 1GB 数据的方案可能并不适用于几十 PB 数据的情况。 有多种具备各自优缺点的可能方法,将在下面对其进行讨论。最好使用几种方法而不是仅仅使用一种方法来弥补它们的各种缺点。

将源数据复制到其它地方

通常摄入到ClickHouse的数据是通过某种持久队列传递的,例如 Apache Kafka

https://kafka.apache.org

在这种情况下,可以配置一组额外的订阅服务器,这些订阅服务器将在写入ClickHouse时读取相同的数据流,并将其存储在冷存储中。 大多数公司已经有一些默认推荐的冷存储,可能是对象存储或分布式文件系统,如 HDFS

https://hadoop.apache.org/docs/stable/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

这种方法较为一般,相当于在别的地方又存了一份。

文件系统快照

某些本地文件系统提供快照功能(例如, ZFS

https://en.wikipedia.org/wiki/ZFS

),但它们可能不是提供实时查询的最佳选择。 一个可能的解决方案是使用这种文件系统创建额外的副本,并将它们与用于SELECT 查询的 分布式

https://clickhouse.com/docs/zh/engines/table-engines/special/distributed 

表分离。 任何修改数据的查询都无法访问此类副本上的快照。 作为回报,这些副本可能具有特殊的硬件配置,每个服务器附加更多的磁盘,这将是经济高效的。
这种方式将需要更多的存储资源。

clickhouse-copier

https://clickhouse.com/docs/zh/operations/utilities/clickhouse-copier

clickhouse-copier是一个多功能工具,最初创建它是为了用于重新切分pb大小的表。 因为它能够在ClickHouse表和集群之间可靠地复制数据,所以它也可用于备份和还原数据。

对于较小的数据量,一个简单的 INSERT INTO ... SELECT ... 到远程表也可以工作。

part操作

ClickHouse允许使用 ALTER TABLE ... FREEZE PARTITION ... 查询以创建表分区的本地副本。 这是利用硬链接(hardlink)到 /var/lib/clickhouse/shadow/ 文件夹中实现的,所以它通常不会因为旧数据而占用额外的磁盘空间。 创建的文件副本不由ClickHouse服务器处理,所以你可以把它们留在那里:你将有一个简单的备份,不需要任何额外的外部系统,但它仍然容易出现硬件问题。 出于这个原因,最好将它们远程复制到另一个位置,然后删除本地副本。 分布式文件系统和对象存储仍然是一个不错的选择,但是具有足够大容量的正常附加文件服务器也可以工作(在这种情况下,传输将通过网络文件系统或者也许是 rsync

https://en.wikipedia.org/wiki/Rsync

来进行).

数据可以使用 ALTER TABLE ... ATTACH PARTITION ... 从备份中恢复。

有关与分区操作相关的查询的详细信息,请参阅 更改文档

https://clickhouse.com/docs/zh/sql-reference/statements/alter#alter_manipulations-with-partitions

第三方工具可用于自动化此方法: clickhouse-backup

https://github.com/AlexAkulov/clickhouse-backup

手动备份及恢复

此处方式即官网中的part操作。

备份
创建备份路径:
创建用户存放备份数据的目录shadow并授权

sudo mkdir -p /var/lib/clickhouse/shadow/
chown clickhouse:clickhouse /var/lib/clickhouse/shadow/

如果目录已存在,需要先清空目录下的数据

执行备份命令:

echo -n 'alter table t_order_mt freeze' | clickhouse-client

执行命令不会锁表
默认不备份元数据

将备份数据保存到其他路径:

sudo mkdir -p /var/lib/clickhouse/backup/
sudo cp -r /var/lib/clickhouse/shadow/ /var/lib/clickhouse/backup/my-backup-name

为下次备份准备,删除shadow下的数据:

sudo rm -rf /var/lib/clickhouse/shadow/*

恢复
模拟删除备份过的表

echo 'drop table t_order_mt' | clickhouse-client

通过show tables检查

重新创建表

cat t_order_mt.sql | clickhouse-client

将备份复制到detached目录并授权,仅拷贝分区目录

sudo cp -rl backup/my-backup-name/1/store/cb1/uuid/*  data/default/t_order_mt/detached

clickhouse使用文件系统硬链接来实现即时备份,而不会导致Clickhouse服务停机(或锁定)。这些硬链接可以进一步用于有效的备份存储。在支持硬链接的文件系统(例如本地文件系统或NFS)上,将cp与-l标志一起使用(或将rsync与-hard-links和-numeric-ids标志一起使用)以避免复制数据。

然后执行attach
按分区恢复(注意授权得给clickhouse):

echo 'alter table t_order_mt attach partition 20200601' | clickhouse-client

clickhouse-backup

上面的过程可使用clickhouse备份工具clickhouse-backup自动化实现。
工具地址:

https://github.com/AlexAkulov/clickhouse-backup

我们进入后选择tags进入到版本选择,选择最新版,然后在assets中选择安装方式

我们选择rpm包,上传后安装:

sudo rpm -ivh clickhouse-backup-2.4.2-1.x86_64.rpm

用rpm方式安装后,默认配置文件在/etc/clickhouse-backup/,可执行文件在/usr/bin下,一共就这俩文件。

查看使用说明:

clickhouse-backup help

查看哪些表可以备份(默认过滤掉system):

clickhouse-backup tables

备份
创建备份:

sudo clickhouse-backup create

查看现有的本地备份(根据配置文件中备份路径来的):

sudo clickhouse-backup list

备份文件存储在/ar/lib/clickhouse/backup/BACKUPNAME。备份名称默认为时间戳,但是可以选择使用-name标志指定备份名称。备份包含两个目录:一个"metadata"目录,其中包含重新创建架构所需的DDL SQL语句;以及一个"shadow"目录,其中包含作为ALTER TABLE...FREEZE操作结果的数据(即备份数据)。

恢复
模拟删除备份过的表

echo 'drop table t_order_mt' | clickhouse-client

模拟删除备份过的库

echo 'drop database default' | clickhouse-client

从备份还原:

sudo clickhouse-backup restore 2020-0601T13-00-00

-- schema:只还原表结构
--data:只还原数据
--table:备份(或还原)特定表。也可以使用一个正则表达式,例如针对特定的数据库:--table=dbname.*

如果报目录已存在则可能是原路径下文件未被删除。

相关文章

  • postgres备份

    | | 备份速度|备份范围|恢复范围|操作影响|备份原理|恢复成本|| ------- |:---...

  • mydumper备份数据库

    一、备份 1.全库备份 2.单库备份 3.表备份 二、恢复 恢复库 单表恢复 单表恢复需要解压备份文件为sql格式...

  • 备份恢复

    备份恢复 在备份恢复需要做哪些工作 设计备份策略 备份周期 天,周,月 备份方式 全备,增量.... 备份什么? ...

  • MySQL(六 数据备份,pymysql模块),数据库远程连接

    MySQL数据备份 一、mysqldump实现逻辑备份 二、恢复逻辑备份 三、备份/恢复案例 四、实现自动化备份 ...

  • mysqldump常用操作

    insert备份 insert恢复 txt备份 txt恢复 mysqldump常用参数 myisam物理备份 in...

  • 备份恢复

    备份恢复 1. 运维人员在备份恢复工作职责 a. 备份、恢复策略定制b. 备份巡检c. 定期恢复演练d. 出现数据...

  • GHOST备份与还原系统(图文)

    GHOST手动备份与还原系统 GHOST恢复: (恢复完毕) GHOST备份:

  • 【MySQL】xtrabackup实战版

    备份脚本 全量备份脚本 增量备份脚本 全量恢复 增量恢复 全量备份脚本 增量备份脚本 目录结构 其中mysql_d...

  • MySQL 用户与授权,备份恢复

    备份恢复 备份: 恢复: 跨主机备份 用户与授权 创建数据库 CREATE DATABASE `ps_shop` ...

  • gitlab的备份

    gitlab的备份 添加 重新加载配置 手动备份 自动备份 恢复备份

网友评论

      本文标题:ClickHouse备份恢复

      本文链接:https://www.haomeiwen.com/subject/drrwddtx.html