ClickHouse实时分析(十五)- ClickHouse的备份与恢复

原文地址:https://program-park.github.io/2022/04/11/clickhouse_16/

1. 手动实现备份及恢复

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

1.1 创建备份路径

  创建用于存放备份数据的目录 shadow(如果目录存在,先清空目录下的数据):

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/*

1.4 恢复数据

  1. 模拟删除备份过的表:
    echo ' drop table t_order_mt ' | clickhouse-client
    
  2. 重新创建表:
    cat events.sql | clickhouse-client
    
  3. 将备份复制到 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 标志一起使用)以避免复制数据。
      注意:仅拷贝分区目录,注意目录所属的用户要是 clickhouse。
  4. 执行 attach:
    echo 'alter table t_order_mt attach partition 20200601' | clickhouse-client
    
  5. 查看数据:
    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-1.0.0-1.x86_64.rpm 上传至/opt/software/目录下,安装:

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

2.2 配置文件

cat /etc/clickhouse-backup/config.yml

2.3 创建备份

  1. 查看可用命令:
    clickhouse-backup help
    
  2. 显示要备份的表:
    clickhouse-backup tables
    
  3. 创建备份:
    sudo clickhouse-backup create
    
  4. 查看现有的本地备份:
    sudo clickhouse-backup list
    

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

2.4 从备份恢复数据

  1. 模拟删除备份过的表:
    echo 'drop table t_order_rmt' | clickhouse-client
    
  2. 从备份还原:
    sudo clickhouse-backup restore 2021-07-25T23-14-50
    
    --schema参数:只还原表结构。
    --data参数:只还原数据。
    --table参数:备份(或还原)特定表。也可以使用一个正则表达式,例如,针对特定的数据库:–table=dbname.*。

2.5 其他说明

  • API 文档:https://github.com/AlexAkulov/clickhouse-backup#api
  • 注意事项:切勿更改文件夹/var/lib/clickhouse/backup的权限,可能会导致数据损坏。
  • 远程备份:
    • 较新版本才支持,需要设置 config 里的 s3 相关配置
    • 上传到远程存储:sudo clickhouse-backup upload xxxx
    • 从远程存储下载:sudo clickhouse-backup download xxxx
    • 保存周期:
      • backups_to_keep_local,本地保存周期,单位天;
      • backups_to_keep_remote,远程存储保存周期,单位天;
      • 0 均表示不删除;

参考文献

  【1】https://www.bilibili.com/video/BV1Yh411z7os?from=search&seid=4579023877699743987&spm_id_from=333.337.0.0

  • 3
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 5
    评论
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

大Null

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值