ClickHouse 数据备份与恢复


官网:https://clickhouse.tech/docs/en/operations/backup/

1. 手动备份与恢复数据

ClickHouse 允许使用 ALTER TABLE … FREEZE PARTITION … 查询以创建表分区的本地副本。 这是利用硬链接(hardlink)到 /var/lib/clickhouse/shadow/ 文件夹中实现的,所以它通常不会 因为旧数据而占用额外的磁盘空间。 创建的文件副本不由 ClickHouse 服务器处理,所以不 需要任何额外的外部系统就有一个简单的备份。防止硬件问题,最好将它们远程复制到另一 个位置,然后删除本地副本。

1.1 创建备份路径

创建用于存放备份数据的目录 shadow

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

# 如果目录存在,先清空目录下的数据

1.2 执行备份命令

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

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

#创建备份存储路径
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
  • 重新创建表
cat events.sql | clickhouse-client
  • 将备份复制到 detached 目录
sudo cp -rl backup/my-backup-name/1/store/cb1/cb176503-cd88-4ea8-8b17-6503cd888ea8/*
data/default/t_order_mt/detached/

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

  • 执行 attach
echo 'alter table t_order_mt attach partition 20220101' | clickhouse-client

  • 查看数据
echo 'select count() from t_order_mt' | clickhouse-client

2. 使用 clickhouse-backup

上面的过程,我们可以使用 Clickhouse 的备份工具 clickhouse-backup 帮我们自动化实现。

工具地址:https://github.com/AlexAkulov/clickhouse-backup/

2.1 部署clickhouse-backup

2.1.1 上传并安装

将 clickhouse-backup-1.0.0-1.x86_64.rpm 上传至/opt/software/目录下,安装:

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

2.1.2 配置文件

cat /etc/clickhouse-backup/config.yml

2.2 使用clickhouse-backup 备份数据

  • 查看可用命令
clickhouse-backup help
  • 显示要备份的表
clickhouse-backup tables
  • 创建备份
sudo clickhouse-backup create
  • 查看现有的本地备份
sudo clickhouse-backup list

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

2.3 使用clickhouse-backup 恢复数据

  • 模拟删除备份过的表
echo 'drop table t_order_rmt' | clickhouse-client
  • 从备份还原
sudo clickhouse-backup restore 2022-01-01T23-14-50

–schema 参数:只还原表结构。

–data 参数:只还原数据。

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

其他说明

(1)API 文档:https : //github.com/AlexAkulov/clickhouse-backup#api

(2)注意事项:切勿更改文件夹/var/lib/clickhouse/backup 的权限,可能会导致数据损坏。

(3)远程备份

较新版本才支持,需要设置 config 里的 s3 相关配置

➢ 上传到远程存储:sudo clickhouse-backup upload xxxx

➢ 从远程存储下载:sudo clickhouse-backup download xxxx

➢ 保存周期: backups_to_keep_local,本地保存周期,单位天 backups_to_keep_remote,远程存储保存周期,单位天 0 均表示不删除


文章作者: hnbian
版权声明: 本博客所有文章除特別声明外,均采用 CC BY 4.0 许可协议。转载请注明来源 hnbian !
评论
 上一篇
ClickHouse 常见错误码 ClickHouse 常见错误码
1. 介绍ClickHouse 是一种高性能列式数据库管理系统,专为在线分析处理(OLAP)场景设计。它具有高查询性能、水平可扩展性和实时数据更新等优点,广泛应用于大数据分析领域。在使用 ClickHouse 时,用户可能会遇到各种错误。为
2022-01-20
下一篇 
Hive 数据倾斜问题定位以及排查 Hive 数据倾斜问题定位以及排查
1. 背景介绍多数介绍数据倾斜的文章都是以大篇幅的理论为主,并没有给出具体的数据倾斜案例。当工作中遇到了倾斜问题,这些理论很难直接应用,导致我们面对倾斜时还是不知所措。 今天我们不扯大篇理论,直接以例子来实践,排查是否出现了数据倾斜,具体是
2021-12-18
  目录