作者:俊达
介绍
clickhouse-backup是altinity提供的一个clickhouse数据库备份和恢复的工具,开源项目地址:https://github.com/Altinity/clickhouse-backup
功能上能满足日常数据库备份恢复的需求:
- 支持单表/全库备份
- 支持备份上传到S3/FTP等存储
- 支持单表/全库恢复
本文对备份工具的使用做一些介绍。
clickhouse-backup工具介绍
clickhouse-backup命令行
可以使用clickhouse-backup命令行工具进行备份和恢复操作。使用clickhoues-backup有几个前提条件
- 需要能访问clickhoues的数据目录(如/var/lib/clickhoues, 在docker或k8s环境中,需要将数据卷挂载到同样的路径)
- 需要有clickhouse账号,能访问clickhouse服务,执行一些sql
- 可以使用参数文件进行配置,默认在/etc/clickhouse-backup/config.yml
命令行参数:
clickhouse-backup
NAME:
clickhouse-backup - Tool for easy backup of ClickHouse with cloud support
USAGE:
clickhouse-backup <command> [-t, --tables=<db>.<table>] <backup_name>
VERSION:
1.3.2
DESCRIPTION:
Run as 'root' or 'clickhouse' user
COMMANDS:
tables Print list of tables
create Create new backup
create_remote Create and upload
upload Upload backup to remote storage
list Print list of backups
download Download backup from remote storage
restore Create schema and restore data from backup
restore_remote Download and restore
delete Delete specific backup
default-config Print default config
print-config Print current config
clean Remove data in 'shadow' folder from all `path` folders available from `system.disks`
server Run API server
help, h Shows a list of commands or help for one command
GLOBAL OPTIONS:
--config FILE, -c FILE Config FILE name. (default: "/etc/clickhouse-backup/config.yml") [$CLICKHOUSE_BACKUP_CONFIG]
--help, -h show help
--version, -v print the version
命令行参数比较直观,
- print-config: 打印当前配置
- default-config: 打印默认配置
- create: 创建备份
- create_remote: 创建备份,并上传到指定存储
- restore:创建表结构,恢复数据
- restore_remote: 下载备份文件,恢复数据
- list:列出备份集
- download:下载备份集
- delete:删除备份集
- server:启动服务。外部可以使用api方式发起备份、恢复任务。适合在容器化环境中使用。
clickhouse-backup 工作机制(k8s)
可以通过命令行的方式使用clickhouse-backup。
如果clickhouse server运行在k8s中,可以开启clickhouse-backup server模式,将clickhouse-backup和clickhouse-server运行在同一个pod中,便于访问数据目录。
整体架构如下图:
上图中的文件操作,除上传下载外,都是使用了硬连接(hard link)的方式,效率很高,也不会占用大量额外的磁盘空间。
clickhouse-backup也支持增量备份。增量备份通过对比2次全量备份产生的part文件来实现。只在将文件上传到remote存储时进行(create_remote, upload),才会进行增量文件对比,恢复一个增量备份时,会以递归的方式下载对应的基础备份。
备份流程
数据备份的步骤大致如下:
1、获取需要备份的表的列表、表的相关元数据(如show create table)。
2、对每一个需要备份的表,使用alter table freeze命令创建表的一个快照
3、将步骤2创建的快照文件,move到backup目录。由于在同一个文件系统,move通常很快。
4、如果需要上传,处理文件上传。
数据恢复流程
数据恢复的步骤和备份的步骤相反
1、创建表结构(使用备份过程中生成的建表语句)
2、如果需要,下载备份文件
3、将文件move到clickhouse 相关表的detatched目录
4、执行alter table attach part命令,将数据恢复到表中。
clickhouse-backup api
clickhouse-backup server开启api服务。可以通过调用api来发起备份/恢复。
# clickhouse-backup server
2022/05/06 16:12:50.845160 info Starting API server on localhost:7171
2022/05/06 16:12:50.869711 info Update last backup size metrics start (onlyLocal=false)
2022/05/06 16:12:50.906673 info SELECT value FROM `system`.`build_options` where name='VERSION_INTEGER'
2022/05/06 16:12:50.921257 info SELECT * FROM system.disks;
2022/05/06 16:12:50.934209 info Update last backup size metrics finish duration=64ms
root@node1:~# curl localhost:7171
Documentation: https://github.com/AlexAkulov/clickhouse-backup#api-configuration
/
/
/backup/tables
/backup/tables/all
/backup/list
/backup/list/{where}
/backup/create
/backup/clean
/backup/upload/{name}
/backup/download/{name}
/backup/restore/{name}
/backup/delete/{where}/{name}
/backup/status
/backup/actions
/backup/actions
Intergration tables
配置文件中开启create_integration_tables,会在system库中创建backup_actions、backup_list表
## /etc/clickhouse-backup/config.yml
api:
listen: localhost:7171
enable_metrics: true
enable_pprof: false
username: ""
password: ""
secure: false
certificate_file: ""
private_key_file: ""
create_integration_tables: true
allow_parallel: false
backup_actions
CREATE TABLE system.backup_actions
(
`command` String,
`start` DateTime,
`finish` DateTime,
`status` String,
`error` String
)
ENGINE = URL('http://127.0.0.1:7171/backup/actions', 'JSONEachRow')
SETTINGS input_format_skip_unknown_fields = 1
backup_list
CREATE TABLE system.backup_list
(
`name` String,
`created` DateTime,
`size` Int64,
`location` String,
`required` String,
`desc` String
)
ENGINE = URL('http://127.0.0.1:7171/backup/list', 'JSONEachRow')
SETTINGS input_format_skip_unknown_fields = 1
这是2个URL存储引擎的表。
往backup_actions表写入数据,就会调用clickhouse-backup server对应的借口,发起备份任务。
查询backup_list表,可以获取到备份列表。
更多技术信息请查看云掣官网https://yunche.pro/?t=yrgw