Clickhouse学习笔记(15)—— Clickhouse备份

手动备份

参考官网:Backup and Restore | ClickHouse Docs

简单来说,就是我们可以通过ALTER TABLE ... FREEZE PARTITION ...命令为表分区创建一个本地副本,然后这个副本硬链接到/var/lib/clickhouse/shadow/文件夹,因此其不会耗费额外的硬盘空间

而且为了防止硬件问题,最好将该副本拷贝到其他的位置并且删除该本次副本;

接下来依照此思路进行试验:

本次备份

首先按创建用于存放备份数据的目录 shadow:

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

执行备份命令:(对表t_order_mt进行备份)

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

有关表t_order_mt可以参考

Clickhouse学习笔记(3)—— Clickhouse表引擎-CSDN博客

中MergeTree(合并树)部分

完成数据本地副本的备份之后查看其中的内容:

与原数据文件对比:

发现该副本是从/var/lib/clickhouse/store文件夹下直接拷贝的数据;


存储到其他路径

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

创建backup文件夹:sudo mkdir -p /var/lib/clickhouse/backup/

拷贝数据:sudo cp -r /var/lib/clickhouse/shadow/ /var/lib/clickhouse/backup/t_order_mt

为下次备份准备,删除 shadow 下的数据:sudo rm -rf /var/lib/clickhouse/shadow/*


数据恢复

  • 删除备份过的表:echo ' drop table t_order_mt ' | clickhouse-client
  • 重新创建表;
  • 然后备份复制到 detached 目录:sudo cp -rl /var/lib/clickhouse/backup/t_order_mt/1/store/092/092cf360-d509-4379-892c-f360d509d379/* /var/lib/clickhouse/data/default/t_order_mt/detached/
  • 执行attach:echo 'alter table t_order_mt attach partition 20200601' | clickhouse-client
  • 查看数据:

clickhouse-backup

clickhouse的自动化备份工具,下载地址:https://github.com/AlexAkulov/clickhouse-backup/

首先上传并安装(rpm):sudo rpm -ivh clickhouse-backup-1.0.0-1.x86_64.rpm

该工具由两部分组成:

①配置文件,路径:/etc/clickhouse-backup/config.yml

注意:1.0.0不支持hdfs

②命令:/usr/bin/clickhouse-backup

常用操作

查看可用命令:clickhouse-backup help

显示要备份的表: clickhouse-backup tables

创建备份:clickhouse-backup create

创建完成后在/var/lib/clickhouse/backup文件夹中可以看到备份文件:

可以通过–name 标志指定备份名称

查看现有的本地备份:clickhouse-backup list

从备份恢复数据:sudo clickhouse-backup restore 2023-08-07T06-58-10

首先删除表t_order_mtecho 'drop table t_order_mt' | clickhouse-client

但是删除完成后发现store文件夹中依旧存在该表对应的数据文件:

可知此时还未完全删除

如果执行备份语句会报错:

但是无论是metadata还是store文件夹中,对应的sql语句都已删除

于是手动删除store文件夹下t_order_mt表对应的数据,之后重试备份恢复:

又有报错,但此时可以看到store中相应的数据已经恢复;

但此时去查询表是查不到的,而且再次备份又会出现同样的报错.......


解决方法:

先还原表结构:clickhouse-backup restore 2023-08-07T06-58-10 --schema

再还原数据:clickhouse-backup restore 2023-08-07T06-58-10 --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 均表示不删除

猜你喜欢

转载自blog.csdn.net/qq_51235856/article/details/134399295
今日推荐