使用clickhouse-backup工具备份clickhouse数据库
工具官网:https://github.com/AlexAkulov/clickhouse-backup/
dockerhub工具官网:https://hub.docker.com/r/alexakulov/clickhouse-backup
注意:这个工具只支持MergeTree 系列表引擎
一、clickhouse在容器外的备份和恢复
若clickhouse装在容器外,如宿主机里
下载
wget https://github.com/AlexAkulov/clickhouse-backup/releases/download/v2.1.3/clickhouse-backup-linux-amd64.tar.gz
mkdir tmp
tar -zxvf clickhouse-backup-linux-amd64.tar.gz -C ./tmp
cd tmp/build/linux/amd64
cp clickhouse-backup /usr/local/bin
clickhouse-backup -v
创建配置文件
mkdir -p /etc/clickhouse-backup/
cd /etc/clickhouse-backup/
创建config.yml内容如下
general:remote_storage: none
clickhouse:username: defaultpassword: ""host: localhostport: 9000
创建备份
clickhouse-backup create
默认备份目录在/var/lib/clickhouse/backup/目录下,默认创建的备份是以时间戳形式的,每个备份包含两个目录,分别是
metadata目录: 包含重新创建所需的DDL SQL
shadow目录: 包含作为ALTER TABLE ... FREEZE操作结果的数据
若缺少shadow目录,看你的程序是否能访问clickhouse数据库的/var/lib/clickhouse/目录。
查看备份列表
clickhouse-backup list
恢复备份
clickhouse-backup restore 2020-07-06T20-13-02
二、clickhouse在容器内的备份和恢复
1.方式一、映射容器目录直接拷贝
需要映射的目录如下
volumes:- "${PWD}/clickhouse/data:/var/lib/clickhouse"- "${PWD}/clickhouse/log:/var/log/clickhouse-server"- "${PWD}/clickhouse/conf/config.xml:/etc/clickhouse-server/config.xml"- "${PWD}/clickhouse/conf/users.xml:/etc/clickhouse-server/users.xml"
直接拷贝对于目录即可
2.方式二、备份到clickhouse的容器目录
备份命令
docker run -u $(id -u root) --rm -it --network docker-compose_default --volumes-from clickhouse \-e CLICKHOUSE_HOST="clickhouse" \-e CLICKHOUSE_USERNAME="default" \-e CLICKHOUSE_PASSWORD="" \alexakulov/clickhouse-backup create
默认备份到clickhouse容器里的/var/lib/clickhouse/backup/目录下
其中network 可以使用docker inspect [容器名] 查看所使用的网络名,CLICKHOUSE_HOST 使用容器名或者外部ip,
恢复命令如下
docker run -u $(id -u root) --rm -it --network docker-compose_default --volumes-from clickhouse \-e CLICKHOUSE_HOST="clickhouse" \-e CLICKHOUSE_USERNAME="default" \-e CLICKHOUSE_PASSWORD="" \alexakulov/clickhouse-backup restore 2020-07-06T20-13-02
3.方式三、备份到clickhouse到远程sftp服务器
这个比较灵活,远程服务器开了ssh就行
备份命令
docker run -u $(id -u root) --rm -it --network docker-compose_default --volumes-from clickhouse \-e CLICKHOUSE_HOST="clickhouse" \-e CLICKHOUSE_USERNAME="default" \-e CLICKHOUSE_PASSWORD="" \-e REMOTE_STORAGE="sftp" \-e SFTP_ADDRESS="192.168.3.51" \-e SFTP_USERNAME="root" \-e SFTP_PASSWORD="root" \-e SFTP_PATH="/root/clickhouse/backup" \alexakulov/clickhouse-backup create_remote
远程服务器需要创建/root/clickhouse/backup目录
恢复命令如下
docker run -u $(id -u root) --rm -it --network docker-compose_default --volumes-from clickhouse \-e CLICKHOUSE_HOST="clickhouse" \-e CLICKHOUSE_USERNAME="default" \-e CLICKHOUSE_PASSWORD="" \-e REMOTE_STORAGE="sftp" \-e SFTP_ADDRESS="192.168.3.51" \-e SFTP_USERNAME="root" \-e SFTP_PASSWORD="root" \-e SFTP_PATH="/root/clickhouse/backup" \alexakulov/clickhouse-backup restore_remote 2020-07-06T20-13-02