ClickHouse备份工具clickhouse-backup的使用

2,486 阅读3分钟

背景

ClickHouse同一集群,可以通过副本表的方式进行数据同步备份。如果是跨集群,比如两地双中心的场景,可以使用备份工具进行数据的备份。参考网上资料来进行操作,总是感觉没那么顺利,或多或少都有一些问题。所以才打算自己写一篇文章,来记录下自己使用过程中的遇到的问题。

总体流程

备份的整体流程如下,执行备份操作的时候,严格按照如下的流程来操作:

f1baba0caf7b94b45f86db6388b88df8.png

源节点和目标节点ClickHouse的安装目录需要保持一致。

版本选择:

由于本身ClickHouse、clickhouse-backup版本迭代很快,版本选择的时候请结合ClickHouse版本做正确的选择,我们选择的是2.2.1版本,可以直接从github上下载:github.com/Altinity/cl…

执行注意:

主要包括如下几个步骤:

1、先在源节点(待备份)上安装clickhouse-backup。

1.1安装

rpm -ivh clickhouse-backup-2.2.1-1.x86_64.rpm

1.2修改配置文件

cd /etc/clickhouse-backup/
cp config.yml.example config.yml
vi config.yml

配置标注区域:

b31a1097756dc60d043ed616c22cfd4f.png

1.3执行备份命令

备份的时候,你可以选择合适的用户进行操作,比如:root用户,这块没有特别的要求,只要能正常进行clickhouse相关操作即可。root用户备份后的文件夹的所属用户及分组信息为:root:root。备份的路径默认是在clickhouse data路径下的backup文件夹下。

#全实例备份
clickhouse-backup create -t all816_xxx
#表级别备份
clickhouse-backup create -t xxx.ods_yyy bk816_ods_yyy
#也可指定用户进行备份,通过如下命令:
sudo -u clickhouse

7c92691d9f48696808db00f6bff6d9b5.png

正常情况下会生成shadow文件夹的,此文件夹保存数据信息,如果没有生成此文件夹,一般是用户权限问题,确认执行的用户有相关的clickhouse数据访问权限。

2、通过SCP命令将备份的数据拷贝到目标节点

ef8576664f73aec3013f81f58db6de18.png

3、在目标节点上执行恢复操作

备份恢复的时候,是可以不需要事先将表建好的,可以从备份文件中恢复,当然你也可以事先建好,我们采用的是后者。

2.1修改配置

配置文件的修改同源节点上的操作。将用户名、IP地址、密码修改为目标节点的ClickHouse信息即可。

2.2修改文件权限

cd /xxx/data/clickhouse/backup
chown -R clickhouse:clickhouse *

务必确保文件能被clickhouse正常访问,包括上级文件夹的权限。否则会出现一些莫名其妙的错误。比如类似:medatata.json already exists的错误。

2.3执行备份恢复

##恢复的时候,建议明确指定schema、还是data,如果你不加此参数,clickhouse-back会直接将原来的表删除重建的(执行DROP IF EXISTS...)
#全量表schema恢复(如果自行新建,可以无需执行此步骤)
sudo -u clickhouse clickhouse-backup restore all815_yyy --schema
#全量数据恢复
sudo -u clickhouse clickhouse-backup restore all815_yyy --data

#指定表schema恢复(如果自行新建,可以无需执行此步骤)
sudo -u clickhouse clickhouse-backup restore bk816_ods_yyy -table dmp_log.bk816_ods_yyy --schema
#指定表进行数据恢复
sudo -u clickhouse clickhouse-backup restore bk816_ods_yyy -table dmp_log.bk816_ods_yyy --data

总结

遇到的问题总结如下:

1、因为ClickHouse安装的时候,默认会新建一个clickhouse用户,分组信息也是clickhouse。所以在进行数据备份或者恢复的时候,需要保证你当前操作用户要有其访问权限。尤其是在数据恢复的时候,需要重点关注。

2、试图从目标节点完成整个备份恢复过程,这块其实细想起来,也不太符合实际。首先数据的备份恢复操作是比较慎重的,还是应该严格分为两个过程:先在源节点进行数据备份,然后文件拷贝到目标节点,最后在目标节点进行数据恢复,clickhouse-back也是基于此流程设计的。