✨✨ clickhouse备份和恢复

·  阅读 1215

这是我参与8月更文挑战的第16天,活动详情查看:8月更文挑战

image.png

为什么要备份CK

虽然CK有复制表之类的引擎,也有一些保护措施(不能人工删除使用带有MergeTree引擎且包含超过50Gb数据的表),但是无法避免的人为失误,以及倒霉透顶的机器集群故障,或者合规要求等,为了再加一份保险,就需要用到只要是数据库,就有备份的必要性

备份方法和工具来源于官网 clickhouse.tech/docs/zh/ope…

刚开始使用建议先在测试环境或开发环境练习,请不要第一次直接在生产上玩

手工备份

  • 手工备份,是使用CK的ALTER命令来实现在,是利用硬链接到一个目录(/var/lib/clickhouse/shadow),恢复时从 /var/lib/clickhouse/bakcup 止录找指定的名称
  • 需要注意的是 手工备份和恢复 都不会涉及到表结构,只单纯的备份和恢复数据,因此相关表结构需要 另外存档和自行创建

基于上述要求,先自行创建/var/lib/clickhouse/{shadow,bakcup},注意这2个目录权限属主属组是clickhouse

备份例子

alter table tableName freeze 
#不进入交互模式,直接运行
echo 'alter table tableName freeze ' | clickhouse-client -u xxxx --password  xxxx
复制代码

在恢复之前需要将shadow里面的数据复制到

恢复例子 Namexxx 为创建备份的 时间,文件夹方式存在,在/var/lib/clickhouse/shadow目录

alter table tableName attach partition Namexxx 
#不进入交互模式,直接运行
echo 'alter table tableName attach partition Namexxx ' | clickhouse-client -u xxxx --password  xxxx

#查看恢复表数据
echo 'select count() from tableName' | clickhouse-client -u xxxx --password  xxxx
复制代码

表结构 虽然手工无法备份表结构,但是已存在的表,CK默认将表结构sql放在/data/clickhouse/data/metadata/defalut/xxxx.sql 此路径下。。只要备份定期该目录既可

工具备份

官方推荐的工具 clickhouse-backup github.com/AlexAkulov/…

此工具不但可以备份数据,还可以备份表结构,另外还支持备份到第三方存储,比如S3(OSS)

从releases下载一个包既可,rpm包的直接rpm -ivh 安装就可以全局使用了,这里我使用的tar包。

1.png

2.png 解压,查看帮助命令

tar xf clickhouse-backup.tar.gz
cd clickhouse-backup
./clickhouse-backup help
复制代码

配置 如果是备份到本地磁盘,只需要将账密 CK地址和端口写入进去既可

4.png

备份数据到本地

因为我这里使用的tar包,在执行命令时需要指定配置文件,如不想指定,将配置文件放到/etc/clickhouse-backup/config.yml 既可

默认备份到/var/lib/clickhouse/backup该路径下

如果你更改了 默认系统数据存放路径(),,那就是path/clickhouse/backup 配置项 Path to data directory, with trailing slash

查看可以备份的表

./clickhouse-backup -c config.yml  tables
复制代码

3.png

备份命令

#备份全部表
./clickhouse-backup -c config.yml create 
#备份全部表,并为此次备份指定名称,,默认以当前时间,以文件夹方式存在
./clickhouse-backup -c config.yml create bak_Namexxx
#备份指定表
./clickhouse-backup -c config.yml create -t default.tableName bak_Namexxx
#备份多表
./clickhouse-backup -c config.yml create -t default.tableName1,default.tableName2 bak_Namexxx

#查看备份列表
./clickhouse-backup -c config.yml list
#删除某次备份
./clickhouse-backup -c config.yml delete local bak_Namexxx
复制代码

恢复命令

#恢复某个备份名称 数据和表结构
./clickhouse-backup -c config.yml restore bak_Namexxx
#指定表还原数据 和表结构
./clickhouse-backup -c config.yml restore -t default.tableName bak_Namexxx
#还原表结构
./clickhouse-backup -c config.yml restore -s 
#还原数据
./clickhouse-backup -c config.yml restore -d 
复制代码

备份数据到阿里云OSS

备份到远程(第三方存储oss) 需要提前配置好 配置文件中s3的部分

5.png

本地备份用的参数是create,远程则是update,来查看一下帮助命令,几乎和create相同

image.png

#创建远程备份
./clickhouse-backup -c config.yml update
#下载远程备份到本地
./clickhouse-backup -c config.yml download
#恢复远程备份
./clickhouse-backup -c config.yml restore_remote
复制代码
分类:
后端
标签:
分类:
后端
标签:
收藏成功!
已添加到「」, 点击更改