手动备份
参考官网: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_mt
:echo '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 均表示不删除