这是我参与8月更文挑战的第16天,活动详情查看:8月更文挑战
为什么要备份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包。
解压,查看帮助命令
tar xf clickhouse-backup.tar.gz
cd clickhouse-backup
./clickhouse-backup help
复制代码
配置 如果是备份到本地磁盘,只需要将账密 CK地址和端口写入进去既可
备份数据到本地
因为我这里使用的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
复制代码
备份命令
#备份全部表
./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的部分
本地备份用的参数是create,远程则是update,来查看一下帮助命令,几乎和create相同
#创建远程备份
./clickhouse-backup -c config.yml update
#下载远程备份到本地
./clickhouse-backup -c config.yml download
#恢复远程备份
./clickhouse-backup -c config.yml restore_remote
复制代码