Clickhouse备份恢复_clickhouse-backup方式备份恢复的使用介绍

https://clickhouse.com/docs/zh/operations/backup
https://github.com/Altinity/clickhouse-backup?tab=readme-ov-file#readme

clichouse-backup备份的总结
1、clichouse-backup备份的方式是物理备份
2、clichouse-backup只能在数据库本机运行备份,在远程异机去备份目标机器的clickhouse数据库的话,只能备份元数据
3、clichouse-backup备份文件名在执行clichouse-backup create backupname备份语句时自定义
4、clichouse-backup配置文件设置了backups_to_keep_local=3和backups_to_keep_remote=15的话,备份的时候本机clickhouse数据目录会有一个backup目录,这个目录只保留最新3天的备份文件,之前的历史备份会被自动删除,且备份时会把备份复制一份到远程目录,远程目录的备份文件保留15天,之前的历史备份会被自动删除。所以配置了这两个参数的话不用像mysql的innobackupex一样再在备份脚本里面写删除历史备份的脚本
5、实验测试过,clichouse-backup能备份单节点也能备份集群节点,单节点和集群节点都能正常恢复
6、可以异地恢复,只需要把备份文件拷贝到目标端的默认备份目录,目标端执行clickhouse-backup list就可以看到源端拷贝过来的备份了

clickhouse-copier
将数据从一个群集中的表复制到另一个(或相同)群集中的表
个人感觉clickhouse-copier是clickhouse官方提供的一个数据迁移工具,用于多个集群之间的数据迁移,做备份的话,差点意思

使用root用户在clickhouse的每个节点上执行如下命令来安装clickhouse-backup工具

root@DDLACHDBDEV002:~# wget https://github.com/Altinity/clickhouse-backup/releases/download/v2.4.2/clickhouse-backup_2.4.2_amd64.deb
root@DDLACHDBDEV002:~# dpkg -i clickhouse-backup_2.4.2_amd64.deb
root@DDLACHDBDEV002:~# whereis clickhouse-backup
clickhouse-backup: /usr/bin/clickhouse-backup /etc/clickhouse-backup
DDLACHDBDEV002 :) select name,path,type from system.disks;
Query id: a1ec3402-1a73-42f4-8752-81c59f1b1888
┌─name────┬─path─────────────────────┬─type──┐
│ default │ /chdata/clickhouse/data/ │ local │
└─────────┴──────────────────────────┴───────┘
root@DDLACHDBDEV002:~# vim /etc/clickhouse-backup/config.yml
general:
  remote_storage: sftp   # 通过sftp上传到远程服务器的话设置为sftp,否则为none
  max_file_size: 1099511627776 #设置备份
  disable_progress_bar: false
  backups_to_keep_local: 7   # 本地备份的个数,大于7则自动删除旧的备份,默认为0,不删除备份
  log_level: info
  allow_empty_backups: false
clickhouse:
  username: default    # 本地clickhouse的连接参数
  password: "888888"
  host: localhost
  port: 9000
  disk_mapping: {""}
  skip_tables:
  - system.*
  - default.*
  - information_schema.*
  - INFORMATION_SCHEMA.*
  timeout: 5m
  freeze_by_part: false
  secure: false
  skip_verify: false
  sync_replicated_tables: true
  skip_sync_replica_timeouts: true
  log_sql_queries: false
sftp:
  address: "127.0.0.1" 
  username: "root"  
  password: "123456" 
  port: 22
  key: ""
  path: "/clickhousebackup" 
  concurrency: 1
  compression_format: none     
  debug: false

备注:关于disk_mapping参数的解释如下,不是说设置disk_mapping: {“数据目录”:“备份的存放目录”}这样来配置备份的存放目录,之前这样配置过,发现备份的存放目录里面只有元数据而没有数据文件

# CLICKHOUSE_DISK_MAPPING, use this mapping when your 'system.disks' are different between the source and destination clusters during backup and restore process
# The format for this env variable is "disk_name1:disk_path1,disk_name2:disk_path2". For YAML please continue using map syntax
DDLACHDBDEV001 :) select name,path from system.disks;
┌─name────┬─path─────────────────────┐
│ default/chdata/clickhouse/data/ │
└─────────┴──────────────────────────┘

查看当前配置文件

root@DDLACHDBDEV002:~# clickhouse-backup print-config

查看可备份的表

root@DDLACHDBDEV002:~# clickhouse-backup --config /etc/clickhouse-backup/config.yml tables

创建备份

root@DDLACHDBDEV002:~# clickhouse-backup create nodexx_clickhouse_backup_yyyymmdd

备份以目录形式存在,该备份目录默认存放在数据库目录的backup子目录下,即/chdata/clickhouse/data/backup,备份目录名称自己定义,本例为nodexx_clickhouse_backup_yyyymmdd

拷贝备份到备份目录

root@DDLACHDBDEV002:~# clickhouse-backup upload nodexx_clickhouse_backup_yyyymmdd

备份恢复测试1

以下7张表在1-4节点的信息
lukestest1.table_mergetree20231031–节点1,2,3,4都是4条记录
lukestest1.table_ReplicatedMergeTree20231031–节点1-2是6条记录,节点3-4是2条记录
lukestest1.table_Distributed_ReplicatedMergeTree20231031–节点1,2,3,4都是8条记录
lukestest1.table_mergetree–节点1,2,3是0条记录,节点4是4条记录
lukestest1.table_mergetree2–节点2是4条记录,节点1,3,4是0条记录
lukestest1.table_Distributed_ReplicatedMergeTree1–节点1,2,3,4都是8条记录
lukestest1.table_ReplicatedMergeTree1–节点1,2,3,4都是4条记录

节点1的信息

DDLACHDBDEV001 :) select name,data_path,metadata_path from system.databases where name in ('lukestest1','sentry');
┌─name───────┬─data_path──────────────────────┬─metadata_path───────────────────────────────────────────────────────────┐
│ lukestest1 │ /chdata/clickhouse/data/store//chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/ │
│ sentry     │ /chdata/clickhouse/data/store//chdata/clickhouse/data/store/24a/24a5aa06-54b5-4606-8c27-5e3adfd11049/ │
└────────────┴────────────────────────────────┴─────────────────────────────────────────────────────────────────────────┘
DDLACHDBDEV001 :) select database,name,data_paths,metadata_path from system.tables where database in ('lukestest1','sentry') order by 1;
┌─database───┬─name──────────────────────────────────────────┬─data_paths──────────────────────────────────────────────────────────────────┬─metadata_path────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ lukestest1 │ table_Distributed_ReplicatedMergeTree1        │ ['/chdata/clickhouse/data/store/966/9663a43b-dcf5-4b2e-b9b0-dbecb1def8bc/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_Distributed_ReplicatedMergeTree1.sql        │
│ lukestest1 │ table_Distributed_ReplicatedMergeTree20231031 │ ['/chdata/clickhouse/data/store/e4b/e4bcc136-193a-4ad8-a56e-c123a80a683f/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_Distributed_ReplicatedMergeTree20231031.sql │
│ lukestest1 │ table_ReplicatedMergeTree1                    │ ['/chdata/clickhouse/data/store/f9c/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_ReplicatedMergeTree1.sql                    │
│ lukestest1 │ table_ReplicatedMergeTree20231031             │ ['/chdata/clickhouse/data/store/600/600470de-9db1-419f-9009-35a552616c56/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_ReplicatedMergeTree20231031.sql             │
│ lukestest1 │ table_mergetree                               │ ['/chdata/clickhouse/data/store/137/137bb490-f192-4482-b747-01c0939e36ad/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_mergetree.sql                               │
│ lukestest1 │ table_mergetree2                              │ ['/chdata/clickhouse/data/store/2ea/2eae7c5a-a3d0-4346-8e6c-e6c4bf9c1605/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_mergetree2.sql                              │
│ lukestest1 │ table_mergetree20231031                       │ ['/chdata/clickhouse/data/store/dbd/dbdeab84-8486-4357-b1f5-5b8c727331c1/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_mergetree20231031.sql                       │
│ sentry     │ errors_local                                  │ ['/chdata/clickhouse/data/store/181/181f6904-a0c2-4c12-976c-7504f435b68c/']/chdata/clickhouse/data/store/24a/24a5aa06-54b5-4606-8c27-5e3adfd11049/errors_local.sql

节点2的信息

DDLACHDBDEV002 :) select name,data_path,metadata_path from system.databases where name in ('lukestest1','sentry');
┌─name───────┬─data_path──────────────────────┬─metadata_path───────────────────────────────────────────────────────────┐
│ lukestest1 │ /chdata/clickhouse/data/store//chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/ │
│ sentry     │ /chdata/clickhouse/data/store//chdata/clickhouse/data/store/24a/24a5aa06-54b5-4606-8c27-5e3adfd11049/ │
└────────────┴────────────────────────────────┴─────────────────────────────────────────────────────────────────────────┘
DDLACHDBDEV002 :) select database,name,data_paths,metadata_path from system.tables where database in ('lukestest1','sentry') order by 1;
┌─database───┬─name──────────────────────────────────────────┬─data_paths──────────────────────────────────────────────────────────────────┬─metadata_path────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ lukestest1 │ table_Distributed_ReplicatedMergeTree1        │ ['/chdata/clickhouse/data/store/966/9663a43b-dcf5-4b2e-b9b0-dbecb1def8bc/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_Distributed_ReplicatedMergeTree1.sql        │
│ lukestest1 │ table_Distributed_ReplicatedMergeTree20231031 │ ['/chdata/clickhouse/data/store/e4b/e4bcc136-193a-4ad8-a56e-c123a80a683f/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_Distributed_ReplicatedMergeTree20231031.sql │
│ lukestest1 │ table_ReplicatedMergeTree1                    │ ['/chdata/clickhouse/data/store/f9c/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_ReplicatedMergeTree1.sql                    │
│ lukestest1 │ table_ReplicatedMergeTree20231031             │ ['/chdata/clickhouse/data/store/600/600470de-9db1-419f-9009-35a552616c56/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_ReplicatedMergeTree20231031.sql             │
│ lukestest1 │ table_mergetree                               │ ['/chdata/clickhouse/data/store/137/137bb490-f192-4482-b747-01c0939e36ad/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_mergetree.sql                               │
│ lukestest1 │ table_mergetree2                              │ ['/chdata/clickhouse/data/store/2ea/2eae7c5a-a3d0-4346-8e6c-e6c4bf9c1605/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_mergetree2.sql                              │
│ lukestest1 │ table_mergetree20231031                       │ ['/chdata/clickhouse/data/store/dbd/dbdeab84-8486-4357-b1f5-5b8c727331c1/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_mergetree20231031.sql                       │
│ sentry     │ errors_local                                  │ ['/chdata/clickhouse/data/store/2e4/2e4b60b2-92b7-4863-a92d-0af4308de3ee/']/chdata/clickhouse/data/store/24a/24a5aa06-54b5-4606-8c27-5e3adfd11049/errors_local.sql

节点3的信息

DDLACHDBDEV003 :) select name,data_path,metadata_path from system.databases where name in ('lukestest1','sentry');
┌─name───────┬─data_path──────────────────────┬─metadata_path───────────────────────────────────────────────────────────┐
│ lukestest1 │ /chdata/clickhouse/data/store//chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/ │
│ sentry     │ /chdata/clickhouse/data/store//chdata/clickhouse/data/store/24a/24a5aa06-54b5-4606-8c27-5e3adfd11049/ │
└────────────┴────────────────────────────────┴─────────────────────────────────────────────────────────────────────────┘
DDLACHDBDEV003 :) select database,name,data_paths,metadata_path from system.tables where database in ('lukestest1','sentry') order by 1;
┌─database───┬─name──────────────────────────────────────────┬─data_paths──────────────────────────────────────────────────────────────────┬─metadata_path────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ lukestest1 │ table_Distributed_ReplicatedMergeTree1        │ ['/chdata/clickhouse/data/store/966/9663a43b-dcf5-4b2e-b9b0-dbecb1def8bc/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_Distributed_ReplicatedMergeTree1.sql        │
│ lukestest1 │ table_Distributed_ReplicatedMergeTree20231031 │ ['/chdata/clickhouse/data/store/e4b/e4bcc136-193a-4ad8-a56e-c123a80a683f/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_Distributed_ReplicatedMergeTree20231031.sql │
│ lukestest1 │ table_ReplicatedMergeTree1                    │ ['/chdata/clickhouse/data/store/f9c/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_ReplicatedMergeTree1.sql                    │
│ lukestest1 │ table_ReplicatedMergeTree20231031             │ ['/chdata/clickhouse/data/store/600/600470de-9db1-419f-9009-35a552616c56/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_ReplicatedMergeTree20231031.sql             │
│ lukestest1 │ table_mergetree                               │ ['/chdata/clickhouse/data/store/137/137bb490-f192-4482-b747-01c0939e36ad/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_mergetree.sql                               │
│ lukestest1 │ table_mergetree2                              │ ['/chdata/clickhouse/data/store/2ea/2eae7c5a-a3d0-4346-8e6c-e6c4bf9c1605/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_mergetree2.sql                              │
│ lukestest1 │ table_mergetree20231031                       │ ['/chdata/clickhouse/data/store/dbd/dbdeab84-8486-4357-b1f5-5b8c727331c1/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_mergetree20231031.sql                       │
│ sentry     │ errors_local                                  │ ['/chdata/clickhouse/data/store/b9c/b9ca82a9-c989-439c-a3c1-3027aea0d3e5/']/chdata/clickhouse/data/store/24a/24a5aa06-54b5-4606-8c27-5e3adfd11049/errors_local.sql

节点4的信息

DDLACHDBDEV004 :) select name,data_path,metadata_path from system.databases where name in ('lukestest1','sentry');
┌─name───────┬─data_path──────────────────────┬─metadata_path───────────────────────────────────────────────────────────┐
│ lukestest1 │ /chdata/clickhouse/data/store//chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/ │
│ sentry     │ /chdata/clickhouse/data/store//chdata/clickhouse/data/store/24a/24a5aa06-54b5-4606-8c27-5e3adfd11049/ │
└────────────┴────────────────────────────────┴─────────────────────────────────────────────────────────────────────────┘
DDLACHDBDEV004 :) select database,name,data_paths,metadata_path from system.tables where database in ('lukestest1','sentry') order by 1;
┌─database───┬─name──────────────────────────────────────────┬─data_paths──────────────────────────────────────────────────────────────────┬─metadata_path────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ lukestest1 │ table_Distributed_ReplicatedMergeTree1        │ ['/chdata/clickhouse/data/store/966/9663a43b-dcf5-4b2e-b9b0-dbecb1def8bc/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_Distributed_ReplicatedMergeTree1.sql        │
│ lukestest1 │ table_Distributed_ReplicatedMergeTree20231031 │ ['/chdata/clickhouse/data/store/e4b/e4bcc136-193a-4ad8-a56e-c123a80a683f/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_Distributed_ReplicatedMergeTree20231031.sql │
│ lukestest1 │ table_ReplicatedMergeTree1                    │ ['/chdata/clickhouse/data/store/f9c/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_ReplicatedMergeTree1.sql                    │
│ lukestest1 │ table_ReplicatedMergeTree20231031             │ ['/chdata/clickhouse/data/store/600/600470de-9db1-419f-9009-35a552616c56/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_ReplicatedMergeTree20231031.sql             │
│ lukestest1 │ table_mergetree                               │ ['/chdata/clickhouse/data/store/137/137bb490-f192-4482-b747-01c0939e36ad/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_mergetree.sql                               │
│ lukestest1 │ table_mergetree2                              │ ['/chdata/clickhouse/data/store/2ea/2eae7c5a-a3d0-4346-8e6c-e6c4bf9c1605/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_mergetree2.sql                              │
│ lukestest1 │ table_mergetree20231031                       │ ['/chdata/clickhouse/data/store/dbd/dbdeab84-8486-4357-b1f5-5b8c727331c1/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_mergetree20231031.sql                       │
│ sentry     │ errors_local                                  │ ['/chdata/clickhouse/data/store/efe/efe99291-0919-4d4e-8487-7433db620412/']/chdata/clickhouse/data/store/24a/24a5aa06-54b5-4606-8c27-5e3adfd11049/errors_local.sql

节点1备份并上传备份到指定目录
clickhouse-backup create node01_clickhousebackup_20231101
clickhouse-backup upload node01_clickhousebackup_20231101
节点2备份并上传备份到指定目录
clickhouse-backup create node02_clickhousebackup_20231101
clickhouse-backup upload node02_clickhousebackup_20231101
节点3备份并上传备份到指定目录
clickhouse-backup create node03_clickhousebackup_20231101
clickhouse-backup upload node03_clickhousebackup_20231101
节点4备份并上传备份到指定目录
clickhouse-backup create node04_clickhousebackup_20231101
clickhouse-backup upload node04_clickhousebackup_20231101

节点1关机删除 lukestest1 库的元数据库和里面所有表的元数据

lukestest1  /chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/ │
table_Distributed_ReplicatedMergeTree1        │ ['/chdata/clickhouse/data/store/966/9663a43b-dcf5-4b2e-b9b0-dbecb1def8bc/']
table_Distributed_ReplicatedMergeTree20231031 │ ['/chdata/clickhouse/data/store/e4b/e4bcc136-193a-4ad8-a56e-c123a80a683f/']
table_ReplicatedMergeTree1                    │ ['/chdata/clickhouse/data/store/f9c/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b/']
table_ReplicatedMergeTree20231031             │ ['/chdata/clickhouse/data/store/600/600470de-9db1-419f-9009-35a552616c56/']
table_mergetree                               │ ['/chdata/clickhouse/data/store/137/137bb490-f192-4482-b747-01c0939e36ad/']
table_mergetree2                              │ ['/chdata/clickhouse/data/store/2ea/2eae7c5a-a3d0-4346-8e6c-e6c4bf9c1605/']
table_mergetree20231031                       │ ['/chdata/clickhouse/data/store/dbd/dbdeab84-8486-4357-b1f5-5b8c727331c1/']

节点2开机删除

drop database lukestest1
truncate table sentry.errors_local

节点3开机删除

drop database lukestest1
drop table sentry.errors_local

节点4开机删除

drop table lukestest1.table_mergetree20231031
drop table lukestest1.table_Distributed_ReplicatedMergeTree20231031
drop table sentry.errors_local

然后节点1开启数据库服务,发现show databases有lukestest1,但是 use lukestest1后执行show tables看不到table了
然后节点2重启数据库服务,shwo database查不到lukestest1了,查不到且被drop的sentry.errors_local,lukestest1库对应的/chdata/clickhouse/data/store/ae1子目录不存在了,表sentry.errors_local对应的元数据文件还在,数据文件目录也存在不过变成空的了
然后节点2重启数据库服务,shwo database查不到lukestest1了,查不到且被drop的sentry.errors_local,lukestest1库对应的/chdata/clickhouse/data/store/ae1子目录不存在了,表sentry.errors_local对应的元数据文件和数据文件子目录都不存在了
然后节点4不动数据库服务,查不到别drop的3张表了,3表对应的元数据文件不存在了但是对应的数据文件还在且大小没有变

恢复,必须在clickhouse服务启动的情况下才能运行,否则报错如下
2023/11/01 07:00:40.726544 error clickhouse connection ping: tcp://localhost:9000 return error: dial tcp 127.0.0.1:9000: connect: connection refused logger=clickhouse
2023/11/01 07:00:40.726634 error can’t connect to clickhouse: dial tcp 127.0.0.1:9000: connect: connection refused

节点1 clickhouse-backup restore node01_clickhousebackup_20231101
节点2 clickhouse-backup restore node02_clickhousebackup_20231101
节点3 clickhouse-backup restore node03_clickhousebackup_20231101
节点4 clickhouse-backup restore node04_clickhousebackup_20231101

只有节点1有如下报错,其他2,3,4节点都正常

2023/11/01 07:55:03.283638  warn can't create table 'lukestest1.table_ReplicatedMergeTree1': code: 253, message: Replica /clickhouse/tables/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b/01/replicas/DDLACHDBDEV001 already exists, will try again backup=node01_clickhousebackup_20231101 operation=restore
2023/11/01 07:55:03.307959  warn can't create table 'lukestest1.table_ReplicatedMergeTree20231031': code: 253, message: Replica /clickhouse/tables/600470de-9db1-419f-9009-35a552616c56/01/replicas/DDLACHDBDEV001 already exists, will try again backup=node01_clickhousebackup_20231101 operation=restore
...
2023/11/01 07:55:05.704752 error can't create table `lukestest1`.`table_ReplicatedMergeTree1`: code: 253, message: Replica /clickhouse/tables/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b/01/replicas/DDLACHDBDEV001 already exists after 53 times, please check your schema dependencies

节点1尝试了拷贝对应table的metadata sql到指定目录再关闭clickhouse服务再执行如下
drop table lukestest1.table_ReplicatedMergeTree1 sync
drop table lukestest1.table_ReplicatedMergeTree20231031 sync

节点1再执行clickhouse-backup restore node01_clickhousebackup_20231101,还是有报错

lukestest1.table_ReplicatedMergeTree1 skipped cause system.replicas entry already exists and replication in progress from another replica logger=clickhouse
lukestest1.table_ReplicatedMergeTree20231031 skipped cause system.replicas entry already exists and replication in progress from another replica logger=clickhouse

恢复后1-4节点
节点1-2的lukestest1.table_ReplicatedMergeTree1和lukestest1.table_ReplicatedMergeTree20231031光有表结构,没有数据库,其他表没有问题

发现两个问题
这种方式的恢复,对drop有效,但是对于ReplicatedMergeTree引擎的表进行truncate和数据文件被物理删除的情况,有一定的问题

备份恢复测试2
只truncate两个节点DDLACHDBDEV001和DDLACHDBDEV002对应的ReplicatedMergeTree引擎的表

恢复过程导入全库报错

root@DDLACHDBDEV001:/clickhousebackup# clickhouse-backup restore  node01_clickhousebackup_20231102
2023/11/02 09:55:48.217933  info replication_in_progress status = [{InProgress:0}] logger=clickhouse
2023/11/02 09:55:48.269645  warn lukestest1.table_ReplicatedMergeTree1 skipped cause system.replicas entry already exists and replication in progress from another replica logger=clickhouse
2023/11/02 09:55:48.269690  info done                      backup=node01_clickhousebackup_20231102 operation=restore table=lukestest1.table_ReplicatedMergeTree1
2023/11/02 09:55:48.274139  warn lukestest1.table_ReplicatedMergeTree20231031 skipped cause system.replicas entry already exists and replication in progress from another replica logger=clickhouse

恢复过程只导入指定表且只导入数据不导表结构也报错

root@DDLACHDBDEV001:/clickhousebackup# clickhouse-backup restore  node01_clickhousebackup_20231102 -t lukestest1.table_ReplicatedMergeTree20231031 -d
2023/11/02 09:53:56.691073  warn lukestest1.table_ReplicatedMergeTree20231031 skipped cause system.replicas entry already exists and replication in progress from another replica logger=clickhouse
DDLACHDBDEV001 :) select database,table,zookeeper_path,replica_name,replica_path from system.replicas;
┌─database───┬─table────────────────────────────┬─zookeeper_path────────────────────────────────────────────┬─replica_name───┬
│ lukestest1 │ table_ReplicatedMergeTree1       │ /clickhouse/tables/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b/01│ DDLACHDBDEV001 │

root@DDLACHDBDEV001:/clickhousebackup# /chdata/zookeeper/apache-zookeeper-3.7.1-bin/bin/zkCli.sh -server DDLACHDBDEV001:2181
[zk: DDLACHDBDEV001:2181(CONNECTED) 1]deleteall '/clickhouse/tables/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b/01';

root@DDLACHDBDEV001:/clickhousebackup# clickhouse-backup restore  node01_clickhousebackup_20231102 -t lukestest1.table_ReplicatedMergeTree1
2023/11/02 10:39:24.520902  info replication_in_progress status = [{InProgress:0}] logger=clickhouse
2023/11/02 10:39:24.530972  info done                      backup=node01_clickhousebackup_20231102 operation=restore table=lukestest1.table_ReplicatedMergeTree1
2023/11/02 10:39:24.531005  info done                      backup=node01_clickhousebackup_20231102 duration=59ms operation=restore
2023/11/02 10:39:24.531023  info done                      backup=node01_clickhousebackup_20231102 operation=restore

DDLACHDBDEV001 :) select database,table,zookeeper_path,replica_name,replica_path from system.replicas where table='table_ReplicatedMergeTree20231031';
┌─database───┬─table─────────────────────────────┬─zookeeper_path─────────────────────────────────────────────┬─replica_name───┬─replica_path───────────────────────────────────────────────────────────────────────┐
│ lukestest1 │ table_ReplicatedMergeTree20231031 │ /clickhouse/tables/600470de-9db1-419f-9009-35a552616c56/01 │ DDLACHDBDEV001 │ /clickhouse/tables/600470de-9db1-419f-9009-35a552616c56/01/replicas/DDLACHDBDEV001 │
└────────────┴───────────────────────────────────┴────────────────────────────────────────────────────────────┴────────────────┴────────────────────────────────────────────────────────────────────────────────────┘
root@DDLACHDBDEV001:/clickhousebackup# /chdata/zookeeper/apache-zookeeper-3.7.1-bin/bin/zkCli.sh -server DDLACHDBDEV001:2181
[zk: DDLACHDBDEV001:2181(CONNECTED) 0] deleteall '/clickhouse/tables/600470de-9db1-419f-9009-35a552616c56/01';

root@DDLACHDBDEV001:/clickhousebackup# clickhouse-backup restore  node01_clickhousebackup_20231102 -t lukestest1.table_ReplicatedMergeTree20231031
2023/11/02 10:42:58.874671  info replication_in_progress status = [{InProgress:0}] logger=clickhouse
2023/11/02 10:42:58.884327  info done                      backup=node01_clickhousebackup_20231102 operation=restore table=lukestest1.table_ReplicatedMergeTree20231031
2023/11/02 10:42:58.884625  info done                      backup=node01_clickhousebackup_20231102 duration=55ms operation=restore
2023/11/02 10:42:58.884749  info done                      backup=node01_clickhousebackup_20231102 operation=restore

以上只恢复了节点1,节点2需要同样的操作

DDLACHDBDEV002 :) select database,table,zookeeper_path,replica_name from system.replicas where table in ('table_ReplicatedMergeTree1','table_ReplicatedMergeTree20231031');
┌─database───┬─table─────────────────────────────┬─zookeeper_path─────────────────────────────────────────────┬─replica_name───┐
│ lukestest1 │ table_ReplicatedMergeTree1        │ /clickhouse/tables/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b/01 │ DDLACHDBDEV002 │
│ lukestest1 │ table_ReplicatedMergeTree20231031 │ /clickhouse/tables/600470de-9db1-419f-9009-35a552616c56/01 │ DDLACHDBDEV002 │
└────────────┴───────────────────────────────────┴────────────────────────────────────────────────────────────┴────────────────┘
root@DDLACHDBDEV002:~# /chdata/zookeeper/apache-zookeeper-3.7.1-bin/bin/zkCli.sh -server DDLACHDBDEV002:2181
[zk: DDLACHDBDEV002:2181(CONNECTED) 0] deleteall '/clickhouse/tables/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b/01';
[zk: DDLACHDBDEV002:2181(CONNECTED) 1] deleteall '/clickhouse/tables/600470de-9db1-419f-9009-35a552616c56/01';

root@DDLACHDBDEV002:~# clickhouse-backup restore  node02_clickhousebackup_20231102 -t lukestest1.table_ReplicatedMergeTree20231031
2023/11/02 10:49:16.935904  info replication_in_progress status = [{InProgress:0}] logger=clickhouse
2023/11/02 10:49:16.944193  info done                      backup=node02_clickhousebackup_20231102 operation=restore table=lukestest1.table_ReplicatedMergeTree20231031
2023/11/02 10:49:16.944236  info done                      backup=node02_clickhousebackup_20231102 duration=71ms operation=restore
2023/11/02 10:49:16.944254  info done                      backup=node02_clickhousebackup_20231102 operation=restore
root@DDLACHDBDEV002:~# clickhouse-backup restore  node02_clickhousebackup_20231102 -t lukestest1.table_ReplicatedMergeTree1
2023/11/02 10:49:36.745037  info replication_in_progress status = [{InProgress:0}] logger=clickhouse
2023/11/02 10:49:36.755868  info done                      backup=node02_clickhousebackup_20231102 operation=restore table=lukestest1.table_ReplicatedMergeTree1
2023/11/02 10:49:36.756064  info done                      backup=node02_clickhousebackup_20231102 duration=72ms operation=restore
2023/11/02 10:49:36.756093  info done                      backup=node02_clickhousebackup_20231102 operation=restore

到zookeeper里面删除ReplicatedMergeTree引擎的表的zookeeper_path后,再clickhouse-backup restore可以正常恢复了

备份恢复测试3
总结:发现这种删除表元数据库目录(就是数据库元数据目录)和表数据库的情况,大概没法直接restore恢复整个库,而是需要restore -t参数来对一张张表进行恢复
物理删除两个节点DDLACHDBDEV001和DDLACHDBDEV002对应的库和所有引擎的表

DDLACHDBDEV001 :) select name,data_path,metadata_path from system.databases where name in ('lukestest1');
┌─name───────┬─data_path──────────────────────┬─metadata_path───────────────────────────────────────────────────────────┐
│ lukestest1 │ /chdata/clickhouse/data/store//chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/ │
└────────────┴────────────────────────────────┴─────────────────────────────────────────────────────────────────────────┘
DDLACHDBDEV001 :) select database,name,data_paths,metadata_path from system.tables where database in ('lukestest1') order by 1;
┌─database───┬─name──────────────────────────────────────────┬─data_paths──────────────────────────────────────────────────────────────────┬─metadata_path────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ lukestest1 │ table_Distributed_ReplicatedMergeTree1        │ ['/chdata/clickhouse/data/store/966/9663a43b-dcf5-4b2e-b9b0-dbecb1def8bc/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_Distributed_ReplicatedMergeTree1.sql        │
│ lukestest1 │ table_Distributed_ReplicatedMergeTree20231031 │ ['/chdata/clickhouse/data/store/e4b/e4bcc136-193a-4ad8-a56e-c123a80a683f/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_Distributed_ReplicatedMergeTree20231031.sql │
│ lukestest1 │ table_ReplicatedMergeTree1                    │ ['/chdata/clickhouse/data/store/f9c/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_ReplicatedMergeTree1.sql                    │
│ lukestest1 │ table_ReplicatedMergeTree20231031             │ ['/chdata/clickhouse/data/store/600/600470de-9db1-419f-9009-35a552616c56/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_ReplicatedMergeTree20231031.sql             │
│ lukestest1 │ table_mergetree                               │ ['/chdata/clickhouse/data/store/137/137bb490-f192-4482-b747-01c0939e36ad/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_mergetree.sql                               │
│ lukestest1 │ table_mergetree2                              │ ['/chdata/clickhouse/data/store/2ea/2eae7c5a-a3d0-4346-8e6c-e6c4bf9c1605/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_mergetree2.sql                              │
│ lukestest1 │ table_mergetree20231031                       │ ['/chdata/clickhouse/data/store/dbd/dbdeab84-8486-4357-b1f5-5b8c727331c1/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_mergetree20231031.sql                       │
└────────────┴───────────────────────────────────────────────┴─────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘
DDLACHDBDEV002 :) select name,data_path,metadata_path from system.databases where name in ('lukestest1');
┌─name───────┬─data_path──────────────────────┬─metadata_path───────────────────────────────────────────────────────────┐
│ lukestest1 │ /chdata/clickhouse/data/store//chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/ │
└────────────┴────────────────────────────────┴─────────────────────────────────────────────────────────────────────────┘
DDLACHDBDEV002 :) select database,name,data_paths,metadata_path from system.tables where database in ('lukestest1') order by 1;
┌─database───┬─name──────────────────────────────────────────┬─data_paths──────────────────────────────────────────────────────────────────┬─metadata_path────────────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ lukestest1 │ table_Distributed_ReplicatedMergeTree1        │ ['/chdata/clickhouse/data/store/966/9663a43b-dcf5-4b2e-b9b0-dbecb1def8bc/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_Distributed_ReplicatedMergeTree1.sql        │
│ lukestest1 │ table_Distributed_ReplicatedMergeTree20231031 │ ['/chdata/clickhouse/data/store/e4b/e4bcc136-193a-4ad8-a56e-c123a80a683f/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_Distributed_ReplicatedMergeTree20231031.sql │
│ lukestest1 │ table_ReplicatedMergeTree1                    │ ['/chdata/clickhouse/data/store/f9c/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_ReplicatedMergeTree1.sql                    │
│ lukestest1 │ table_ReplicatedMergeTree20231031             │ ['/chdata/clickhouse/data/store/600/600470de-9db1-419f-9009-35a552616c56/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_ReplicatedMergeTree20231031.sql             │
│ lukestest1 │ table_mergetree                               │ ['/chdata/clickhouse/data/store/137/137bb490-f192-4482-b747-01c0939e36ad/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_mergetree.sql                               │
│ lukestest1 │ table_mergetree2                              │ ['/chdata/clickhouse/data/store/2ea/2eae7c5a-a3d0-4346-8e6c-e6c4bf9c1605/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_mergetree2.sql                              │
│ lukestest1 │ table_mergetree20231031                       │ ['/chdata/clickhouse/data/store/dbd/dbdeab84-8486-4357-b1f5-5b8c727331c1/']/chdata/clickhouse/data/store/ae1/ae1d8050-fdd6-4274-8eb8-c7e5270dd09c/table_mergetree20231031.sql                       │
└────────────┴───────────────────────────────────────────────┴─────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

节点1上做备份
clickhouse-backup create node01_clickhousebackup_20231103_01
clickhouse-backup upload node01_clickhousebackup_20231103_01
节点2上做备份
clickhouse-backup create node02_clickhousebackup_20231103_01
clickhouse-backup upload node02_clickhousebackup_20231103_01

关闭节点1和节点2
systemctl stop clickhouse-server

删除节点1和节点2数据库的元数据路径和表的存储路径

启动节点1和节点2
systemctl start clickhouse-server

节点1上做恢复
clickhouse-backup restore node01_clickhousebackup_20231103_01
节点2上做恢复
clickhouse-backup restore node02_clickhousebackup_20231103_01
节点1有如下报错

2023/11/03 08:43:06.505938  warn lukestest1.table_ReplicatedMergeTree1 skipped cause system.replicas entry already exists and replication in progress from another replica logger=clickhouse
2023/11/03 08:43:06.530428  warn lukestest1.table_ReplicatedMergeTree20231031 skipped cause system.replicas entry already exists and replication in progress from another replica logger=clickhouse

节点2有如下报错

2023/11/03 08:43:16.874915  warn can't create table 'lukestest1.table_ReplicatedMergeTree1': code: 253, message: Replica /clickhouse/tables/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b/01/replicas/DDLACHDBDEV002 already exists, will try again backup=node02_clickhousebackup_20231103_01 operation=restore
2023/11/03 08:43:16.907099  warn can't create table 'lukestest1.table_ReplicatedMergeTree20231031': code: 253, message: Replica /clickhouse/tables/600470de-9db1-419f-9009-35a552616c56/01/replicas/DDLACHDBDEV002 already exists, will try again backup=node02_clickhousebackup_20231103_01 operation=restore

恢复后发现节点1有表lukestest1.table_ReplicatedMergeTree1和lukestest1.table_ReplicatedMergeTree20231031但是没有数据
恢复后发现节点2没有表lukestest1.table_ReplicatedMergeTree1和lukestest1.table_ReplicatedMergeTree20231031

节点1节点2查询ReplicatedMergeTree引擎表

DDLACHDBDEV001 :) select database,table,zookeeper_path,replica_name from system.replicas where table in ('table_ReplicatedMergeTree1','table_ReplicatedMergeTree20231031');
┌─database───┬─table─────────────────────────────┬─zookeeper_path─────────────────────────────────────────────┬─replica_name───┐
│ lukestest1 │ table_ReplicatedMergeTree1        │ /clickhouse/tables/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b/01 │ DDLACHDBDEV001 │
│ lukestest1 │ table_ReplicatedMergeTree20231031 │ /clickhouse/tables/600470de-9db1-419f-9009-35a552616c56/01 │ DDLACHDBDEV001 │
└────────────┴───────────────────────────────────┴────────────────────────────────────────────────────────────┴────────────────┘
DDLACHDBDEV002 :) select database,table,zookeeper_path,replica_name from system.replicas where table in ('table_ReplicatedMergeTree1','table_ReplicatedMergeTree20231031');
0 rows in set. Elapsed: 0.003 sec.

节点1执行

[zk: DDLACHDBDEV001:2181(CONNECTED) 0]deleteall '/clickhouse/tables/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b/01';
[zk: DDLACHDBDEV001:2181(CONNECTED) 1]deleteall '/clickhouse/tables/600470de-9db1-419f-9009-35a552616c56/01';
DDLACHDBDEV001 :) drop table lukestest1.table_ReplicatedMergeTree1;
DDLACHDBDEV001 :) drop table lukestest1.table_ReplicatedMergeTree20231031;

节点1执行

clickhouse-backup restore  node01_clickhousebackup_20231103_01 -t lukestest1.table_ReplicatedMergeTree1 lukestest1.table_ReplicatedMergeTree20231031
报错2023/11/03 08:58:11.438212 error can't create table `lukestest1`.`table_ReplicatedMergeTree1`: code: 57, message: Directory for table data store/f9c/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b/ already exists after 1 times, please check your schema dependencies

节点1进入/chdata/clickhouse/data/store/f9c/和/chdata/clickhouse/data/store/600,把下面的子目录改名

节点1执行

root@DDLACHDBDEV001:/chdata/clickhouse/data/store/600# clickhouse-backup restore  node01_clickhousebackup_20231103_01 -t lukestest1.table_ReplicatedMergeTree1 lukestest1.table_ReplicatedMergeTree20231031
2023/11/03 09:03:58.402157 error can't create table `lukestest1`.`table_ReplicatedMergeTree1`: code: 57, message: Mapping for table with UUID=f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b already exists. It happened due to UUID collision, most likely because some not random UUIDs were manually specified in CREATE queries. after 1 times

节点1执行

[zk: DDLACHDBDEV001:2181(CONNECTED) 0]deleteall '/clickhouse/tables/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b';
[zk: DDLACHDBDEV001:2181(CONNECTED) 1]deleteall '/clickhouse/tables/600470de-9db1-419f-9009-35a552616c56';

节点1执行

root@DDLACHDBDEV001:/chdata/clickhouse/data/store/600# clickhouse-backup restore  node01_clickhousebackup_20231103_01 -t lukestest1.table_ReplicatedMergeTree1 lukestest1.table_ReplicatedMergeTree20231031

只恢复了表lukestest1.table_ReplicatedMergeTree1,说明-t后面只能有一张表名
节点1执行

root@DDLACHDBDEV001:/chdata/clickhouse/data/store/600# clickhouse-backup restore  node01_clickhousebackup_20231103_01 -t lukestest1.table_ReplicatedMergeTree20231031

恢复了lukestest1.table_ReplicatedMergeTree20231031

不过进入节点2发现lukestest1.table_ReplicatedMergeTree1和lukestest1.table_ReplicatedMergeTree20231031两表还是没有恢复,需要继续在节点2执行恢复

节点2执行

root@DDLACHDBDEV002:# clickhouse-backup restore  node02_clickhousebackup_20231103_01 -t lukestest1.table_ReplicatedMergeTree1 
报错2023/11/03 09:16:16.892373  warn lukestest1.table_ReplicatedMergeTree1 skipped cause system.replicas entry already exists and replication in progress from another replica logger=clickhouse
root@DDLACHDBDEV002:# clickhouse-backup restore  node02_clickhousebackup_20231103_01 -t lukestest1.table_ReplicatedMergeTree20231031
报错2023/11/03 09:16:30.533921  warn lukestest1.table_ReplicatedMergeTree20231031 skipped cause system.replicas entry already exists and replication in progress from another replica logger=clickhouse

节点2执行

DDLACHDBDEV002 :) select database,table,zookeeper_path,replica_name from system.replicas where table in ('table_ReplicatedMergeTree1','table_ReplicatedMergeTree20231031');
┌─database───┬─table─────────────────────────────┬─zookeeper_path─────────────────────────────────────────────┬─replica_name───┐
│ lukestest1 │ table_ReplicatedMergeTree1        │ /clickhouse/tables/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b/01 │ DDLACHDBDEV002 │
│ lukestest1 │ table_ReplicatedMergeTree20231031 │ /clickhouse/tables/600470de-9db1-419f-9009-35a552616c56/01 │ DDLACHDBDEV002 │
└────────────┴───────────────────────────────────┴────────────────────────────────────────────────────────────┴────────────────┘
[zk: DDLACHDBDEV002:2181(CONNECTED) 0] deleteall '/clickhouse/tables/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b/01';
[zk: DDLACHDBDEV002:2181(CONNECTED) 1] deleteall '/clickhouse/tables/600470de-9db1-419f-9009-35a552616c56/01';

节点2执行

root@DDLACHDBDEV002:# clickhouse-backup restore  node02_clickhousebackup_20231103_01 -t lukestest1.table_ReplicatedMergeTree1 
root@DDLACHDBDEV002:# clickhouse-backup restore  node02_clickhousebackup_20231103_01 -t lukestest1.table_ReplicatedMergeTree20231031

两表在节点2都恢复好了

检查后,发现节点1的mergetree引擎的表只有表结构没有数据,节点2执行如下

root@DDLACHDBDEV002:# clickhouse-backup restore  node02_clickhousebackup_20231103_01 -t lukestest1.table_mergetree20231031
root@DDLACHDBDEV002:# clickhouse-backup restore  node02_clickhousebackup_20231103_01 -t lukestest1.table_mergetree2

至此最终彻底恢复节点1和节点2

备份恢复测试4
两个节点DDLACHDBDEV001和DDLACHDBDEV002只drop对应的ReplicatedMergeTree,MergeTree,distributed引擎的表

节点1上做备份
clickhouse-backup create node01_clickhousebackup_20231106
clickhouse-backup upload node01_clickhousebackup_20231106
节点2上做备份
clickhouse-backup create node02_clickhousebackup_20231106
clickhouse-backup upload node02_clickhousebackup_20231106

节点1和节点2都去drop ReplicatedMergeTree,MergeTree,distributed引擎的表

节点1执行恢复
root@DDLACHDBDEV001:# clickhouse-backup restore node01_clickhousebackup_20231106

节点2执行恢复
root@DDLACHDBDEV001:# clickhouse-backup restore node02_clickhousebackup_20231106

被drop的表都找回来了

备份恢复测试5
两个节点DDLACHDBDEV001和DDLACHDBDEV002只drop database

节点1上做备份

clickhouse-backup create node01_clickhousebackup_20231106
clickhouse-backup upload node01_clickhousebackup_20231106

节点2上做备份

clickhouse-backup create node02_clickhousebackup_20231106
clickhouse-backup upload node02_clickhousebackup_20231106

节点1执行删除db操作

DDLACHDBDEV001 :) drop database lukestest1;

节点2执行删除db操作

DDLACHDBDEV002 :) drop database lukestest1;

节点1执行恢复

root@DDLACHDBDEV001:# clickhouse-backup restore  node01_clickhousebackup_20231106
报错如下
2023/11/06 03:19:52.782595  warn can't create table 'lukestest1.table_ReplicatedMergeTree1': code: 57, message: Directory for table data store/f9c/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b/ already exists, will try again backup=node01_clickhousebackup_20231106 operation=restore
2023/11/06 03:19:52.784587  warn can't create table 'lukestest1.table_ReplicatedMergeTree20231031': code: 57, message: Directory for table data store/600/600470de-9db1-419f-9009-35a552616c56/ already exists, will try again backup=node01_clickhousebackup_20231106 operation=restore
2023/11/06 03:19:52.787136  warn can't create table 'lukestest1.table_mergetree': code: 57, message: Directory for table data store/137/137bb490-f192-4482-b747-01c0939e36ad/ already exists, will try again backup=node01_clickhousebackup_20231106 operation=restore
2023/11/06 03:19:52.788726  warn can't create table 'lukestest1.table_mergetree2': code: 57, message: Directory for table data store/2ea/2eae7c5a-a3d0-4346-8e6c-e6c4bf9c1605/ already exists, will try again backup=node01_clickhousebackup_20231106 operation=restore
2023/11/06 03:19:52.790026  warn can't create table 'lukestest1.table_mergetree20231031': code: 57, message: Directory for table data store/dbd/dbdeab84-8486-4357-b1f5-5b8c727331c1/ already exists, will try again backup=node01_clickhousebackup_20231106 operation=restore
2023/11/06 03:20:10.561241  warn can't create table 'lukestest1.table_Distributed_ReplicatedMergeTree1': code: 57, message: Directory for table data store/966/9663a43b-dcf5-4b2e-b9b0-dbecb1def8bc/ already exists, will try again backup=node01_clickhousebackup_20231106 operation=restore
2023/11/06 03:20:10.603421  warn can't create table 'lukestest1.table_Distributed_ReplicatedMergeTree20231031': code: 57, message: Directory for table data store/e4b/e4bcc136-193a-4ad8-a56e-c123a80a683f/ already exists, will try again backup=node01_clickhousebackup_20231106 operation=restore

节点2执行恢复

root@DDLACHDBDEV002:# clickhouse-backup restore  node02_clickhousebackup_20231106
报错如下
2023/11/06 03:21:10.186776  warn can't create table 'lukestest1.table_ReplicatedMergeTree1': code: 57, message: Directory for table data store/f9c/f9ce3729-2815-4a9b-bdf5-7f24cd6ab01b/ already exists, will try again backup=node02_clickhousebackup_20231106 operation=restore
2023/11/06 03:21:10.189623  warn can't create table 'lukestest1.table_ReplicatedMergeTree20231031': code: 57, message: Directory for table data store/600/600470de-9db1-419f-9009-35a552616c56/ already exists, will try again backup=node02_clickhousebackup_20231106 operation=restore
2023/11/06 03:21:10.193292  warn can't create table 'lukestest1.table_mergetree': code: 57, message: Directory for table data store/137/137bb490-f192-4482-b747-01c0939e36ad/ already exists, will try again backup=node02_clickhousebackup_20231106 operation=restore
2023/11/06 03:21:10.195192  warn can't create table 'lukestest1.table_mergetree2': code: 57, message: Directory for table data store/2ea/2eae7c5a-a3d0-4346-8e6c-e6c4bf9c1605/ already exists, will try again backup=node02_clickhousebackup_20231106 operation=restore
2023/11/06 03:21:10.199158  warn can't create table 'lukestest1.table_mergetree20231031': code: 57, message: Directory for table data store/dbd/dbdeab84-8486-4357-b1f5-5b8c727331c1/ already exists, will try again backup=node02_clickhousebackup_20231106 operation=restore
2023/11/06 03:21:16.342629  warn can't create table 'lukestest1.table_Distributed_ReplicatedMergeTree1': code: 57, message: Directory for table data store/966/9663a43b-dcf5-4b2e-b9b0-dbecb1def8bc/ already exists, will try again backup=node02_clickhousebackup_20231106 operation=restore
2023/11/06 03:21:16.393215  warn can't create table 'lukestest1.table_Distributed_ReplicatedMergeTree20231031': code: 57, message: Directory for table data store/e4b/e4bcc136-193a-4ad8-a56e-c123a80a683f/ already exists, will try again backup=node02_clickhousebackup_20231106 operation=restore

登陆节点1和节点2,发现db lukestest1存在了,但是里面没有一张表

节点1继续执行恢复
root@DDLACHDBDEV001:# clickhouse-backup restore node01_clickhousebackup_20231106
没有报错,正常恢复了

节点2继续执行恢复

root@DDLACHDBDEV002:# clickhouse-backup restore  node02_clickhousebackup_20231106
除了ReplicatedMergeTree引擎的表有报错,其他表正常恢复
2023/11/06 05:04:34.050680  warn lukestest1.table_ReplicatedMergeTree1 skipped cause system.replicas entry already exists and replication in progress from another replica logger=clickhouse
2023/11/06 05:04:34.050705  info done                      backup=node02_clickhousebackup_20231106 operation=restore table=lukestest1.table_ReplicatedMergeTree1
2023/11/06 05:04:34.090644  warn lukestest1.table_ReplicatedMergeTree20231031 skipped cause system.replicas entry already exists and replication in progress from another replica logger=clickhouse
2023/11/06 05:04:34.090847  info done                      backup=node02_clickhousebackup_20231106 operation=restore table=lukestest1.table_ReplicatedMergeTree20231031

登陆节点1和节点2,发现db lukestest1里面的表都有了,且数据也恢复出来了
select count(*) from tables

常用命令
clickhouse-backup list --显示备份信息
clickhouse-backup download backupname --下载远程的某个备份备份到本地目录
clickhouse-backup restore backupname --使用某个备份来恢复
clickhouse-backup restore backupname -t dbname.tablename1,dbname.tablename2 --使用某个备份来恢复指定的表

clickhouse-backup是物理备份的理解

DDLACHDBDEV001 :) select database,name,engine,data_paths,metadata_path from system.tables where database='lukestest1';
┌─database───┬─name──────────────────────────────────┬─engine──────────────┬─data_paths──────────────────────────────────────────────────────────────────┬─metadata_path────────────────────────────────────────────────────────────────────────────────────────────────────┐
│ lukestest1 │ table_Distributed_ReplicatedMergeTree │ Distributed['/chdata/clickhouse/data/store/16c/16c4621c-63c6-4ad4-9c6e-d16d93aa797e/']/chdata/clickhouse/data/store/67b/67bcf47f-0041-4e2f-af59-a6cc54c5d732/table_Distributed_ReplicatedMergeTree.sql │
│ lukestest1 │ table_ReplicatedMergeTree             │ ReplicatedMergeTree │ ['/chdata/clickhouse/data/store/a13/a13ff214-816b-4d01-9600-2a71f70853e6/']/chdata/clickhouse/data/store/67b/67bcf47f-0041-4e2f-af59-a6cc54c5d732/table_ReplicatedMergeTree.sql             │
└────────────┴───────────────────────────────────────┴─────────────────────┴─────────────────────────────────────────────────────────────────────────────┴──────────────────────────────────────────────────────────────────────────────────────────────────────────────────┘

数据库中数据文件路径

root@DDLACHDBDEV001:~# ll /chdata/clickhouse/data/store/a13/a13ff214-816b-4d01-9600-2a71f70853e6/
total 4
drwxr-x--- 5 clickhouse clickhouse  88 Apr  9 07:54 ./
drwxr-x--- 3 clickhouse clickhouse  50 Apr  9 07:52 ../
drwxr-x--- 2 clickhouse clickhouse 231 Apr  9 07:53 202011_0_0_0/
drwxr-x--- 2 clickhouse clickhouse 231 Apr  9 07:54 202011_1_1_0/
drwxr-x--- 2 clickhouse clickhouse   6 Apr  9 07:52 detached/
-rw-r----- 1 clickhouse clickhouse   1 Apr  9 07:52 format_version.txt
root@DDLACHDBDEV001:~# ll /chdata/clickhouse/data/store/a13/a13ff214-816b-4d01-9600-2a71f70853e6/202011_1_1_0/
total 40
drwxr-x--- 2 clickhouse clickhouse 231 Apr  9 07:54 ./
drwxr-x--- 5 clickhouse clickhouse  88 Apr  9 07:54 ../
-r--r----- 4 clickhouse clickhouse 258 May 14 09:43 checksums.txt
-r--r----- 4 clickhouse clickhouse  72 May 14 09:43 columns.txt
-r--r----- 4 clickhouse clickhouse   1 May 14 09:43 count.txt
-r--r----- 4 clickhouse clickhouse  73 May 14 09:43 data.bin
-r--r----- 4 clickhouse clickhouse  80 May 14 09:43 data.mrk3
-r--r----- 4 clickhouse clickhouse  10 May 14 09:43 default_compression_codec.txt
-r--r----- 4 clickhouse clickhouse   1 May 14 09:43 metadata_version.txt
-r--r----- 4 clickhouse clickhouse   8 May 14 09:43 minmax_create_time.idx
-r--r----- 4 clickhouse clickhouse   4 May 14 09:43 partition.dat
-r--r----- 4 clickhouse clickhouse   6 May 14 09:43 primary.idx

备份目录中数据文件信息
root@DDLACHDBDEV001:~# ll /chdata/clickhouse/data/backup/20240514/shadow/lukestest1/table_ReplicatedMergeTree/
total 0
drwxr-x--- 3 clickhouse clickhouse 21 May 14 06:00 ./
drwxr-x--- 3 clickhouse clickhouse 39 May 14 06:00 ../
drwxr-x--- 4 clickhouse clickhouse 46 May 14 06:00 default/
root@DDLACHDBDEV001:~# ll /chdata/clickhouse/data/backup/20240514/shadow/lukestest1/table_ReplicatedMergeTree/default/
total 0
drwxr-x--- 4 clickhouse clickhouse  46 May 14 06:00 ./
drwxr-x--- 3 clickhouse clickhouse  21 May 14 06:00 ../
drwxr-x--- 2 root       root       231 May 14 06:00 202011_0_0_0/
drwxr-x--- 2 root       root       231 May 14 06:00 202011_1_1_0/
root@DDLACHDBDEV001:~# ll /chdata/clickhouse/data/backup/20240514/shadow/lukestest1/table_ReplicatedMergeTree/default/202011_1_1_0/
total 40
drwxr-x--- 2 root       root       231 May 14 06:00 ./
drwxr-x--- 4 clickhouse clickhouse  46 May 14 06:00 ../
-r--r----- 4 clickhouse clickhouse 258 May 14 09:43 checksums.txt
-r--r----- 4 clickhouse clickhouse  72 May 14 09:43 columns.txt
-r--r----- 4 clickhouse clickhouse   1 May 14 09:43 count.txt
-r--r----- 4 clickhouse clickhouse  73 May 14 09:43 data.bin
-r--r----- 4 clickhouse clickhouse  80 May 14 09:43 data.mrk3
-r--r----- 4 clickhouse clickhouse  10 May 14 09:43 default_compression_codec.txt
-r--r----- 4 clickhouse clickhouse   1 May 14 09:43 metadata_version.txt
-r--r----- 4 clickhouse clickhouse   8 May 14 09:43 minmax_create_time.idx
-r--r----- 4 clickhouse clickhouse   4 May 14 09:43 partition.dat
-r--r----- 4 clickhouse clickhouse   6 May 14 09:43 primary.idx

数据库中元数据文件信息
root@DDLACHDBDEV001:~# ll /chdata/clickhouse/data/store/67b/67bcf47f-0041-4e2f-af59-a6cc54c5d732/
total 8
drwxr-x--- 2 clickhouse clickhouse  92 Apr  9 07:54 ./
drwxr-x--- 3 clickhouse clickhouse  50 Apr  9 07:50 ../
-rw-r----- 1 clickhouse clickhouse 207 Apr  9 07:54 table_Distributed_ReplicatedMergeTree.sql
-rw-r----- 1 clickhouse clickhouse 267 Apr  9 07:52 table_ReplicatedMergeTree.sql

备份目录中元数据文件信息
root@DDLACHDBDEV001:~# ll /chdata/clickhouse/data/backup/20240514/metadata
total 4
drwxr-x--- 5 clickhouse clickhouse   53 May 14 06:00 ./
drwxr-x--- 4 clickhouse clickhouse   77 May 14 06:00 ../
drwxr-x--- 2 clickhouse clickhouse  223 May 14 06:00 actuals/
drwxr-x--- 2 clickhouse clickhouse   94 May 14 06:00 lukestest1/
drwxr-x--- 2 clickhouse clickhouse 4096 May 14 06:00 sentry/
root@DDLACHDBDEV001:~# ll /chdata/clickhouse/data/backup/20240514/metadata/lukestest1/
total 8
drwxr-x--- 2 clickhouse clickhouse  94 May 14 06:00 ./
drwxr-x--- 5 clickhouse clickhouse  53 May 14 06:00 ../
-rw-r--r-- 1 clickhouse clickhouse 393 May 14 06:00 table_Distributed_ReplicatedMergeTree.json
-rw-r--r-- 1 clickhouse clickhouse 562 May 14 06:00 table_ReplicatedMergeTree.json

异机恢复,可以正常恢复,只要把备份文件拷贝到目标端的默认备份目录,目标端执行clickhouse-backup list就可以看到源端拷贝过来的备份了
源端

[root@FSTachDEV2 ~]# cat /etc/redhat-release
CentOS Linux release 7.6.1810 (Core)
[root@FSTachDEV2 ~]# clickhouse-client
FSTachDEV2 :) show databases;
   ┌─name───────────────┐
1. │ INFORMATION_SCHEMA │
2.default3. │ information_schema │
4. │ lukestest1         │
5. │ lukestest2         │
6. │ system             │
   └────────────────────┘
FSTachDEV2 :) use lukestest1;
FSTachDEV2 :) show tables;
   ┌─name──────────────┐
1. │ table88_mergetree │
2. │ table_mergetree   │
   └───────────────────┘
FSTachDEV2 :) select * from table_mergetree;
   ┌─id─┬─────────create_time─┐
1.12020-11-17 00:00:002.102020-11-17 00:00:003.112020-11-17 00:00:004.122020-11-17 00:00:00 │
   └────┴─────────────────────┘
FSTachDEV2 :) select * from table88_mergetree;
   ┌─id───┬─────────create_time─┐
1.881969-12-31 16:00:002.8881969-12-31 16:00:003.88881969-12-31 16:00:00 │
   └──────┴─────────────────────┘
FSTachDEV2 :) use lukestest2;
FSTachDEV2 :) show tables;
   ┌─name──────────────┐
1. │ table99_mergetree │
2. │ table_mergetree   │
   └───────────────────┘
FSTachDEV2 :) select * from table_mergetree;
   ┌─id─┬─────────create_time─┐
1.52020-11-17 00:00:002.62020-11-17 00:00:003.72020-11-17 00:00:004.82020-11-17 00:00:005.92020-11-17 00:00:00 │
   └────┴─────────────────────┘
FSTachDEV2 :) select * from table99_mergetree;
   ┌─id──┬─────────create_time─┐
1.991999-09-09 00:00:002.9991999-09-09 00:00:00 │
   └─────┴─────────────────────┘
FSTachDEV2 :) select name,path from system.disks;
   ┌─name────┬─path─────────────────────┐
1. │ backups │ /backups/2.default/chdata/clickhouse/data/ │
   └─────────┴──────────────────────────┘
[root@FSTachDEV2 ~]# clickhouse-backup create FSTachDEV2_20240618
[root@FSTachDEV2 ~]# ll /chdata/clickhouse/data/backup/
total 0
drwxr-x---. 4 clickhouse clickhouse 54 Jun 17 22:56 FSTachDEV2_20240618
[root@FSTachDEV2 ~]# clickhouse-backup list
FSTachDEV2_20240618   4.20KiB   18/06/2024 05:56:40   local

目标端

root@FSTachDEV3:~# cat /etc/issue
Ubuntu 22.04.1 LTS \n \l
root@FSTachDEV3:~# clickhouse-client
FSTachDEV3 :) show databases;
   ┌─name───────────────┐
1. │ INFORMATION_SCHEMA │
2.default3. │ information_schema │
4. │ system             │
   └────────────────────┘
FSTachDEV3 :) select name,path from system.disks;
   ┌─name────┬─path─────────────────┐
1. │ backups │ /backups/clickhouse/2.default/var/lib/clickhouse/ │
   └─────────┴──────────────────────┘
root@FSTachDEV3:~# clickhouse-backup list
root@FSTachDEV3:~# scp -r root@FSTachDEV2:/chdata/clickhouse/data/backup /var/lib/clickhouse/
root@FSTachDEV3:~# clickhouse-backup list
FSTachDEV2_20240618   4.20KiB   18/06/2024 05:56:40   local
root@FSTachDEV3:~# clickhouse-backup restore FSTachDEV2_20240618
2024/06/18 06:11:43.832414  info done                      backup=FSTachDEV2_20240618 operation=restore table=lukestest1.table88_mergetree
2024/06/18 06:11:43.833837  info done                      backup=FSTachDEV2_20240618 operation=restore table=lukestest1.table_mergetree
2024/06/18 06:11:43.835309  info done                      backup=FSTachDEV2_20240618 operation=restore table=lukestest2.table99_mergetree
2024/06/18 06:11:43.836581  info done                      backup=FSTachDEV2_20240618 operation=restore table=lukestest2.table_mergetree
2024/06/18 06:11:43.836776  info done                      backup=FSTachDEV2_20240618 duration=110ms operation=restore
2024/06/18 06:11:43.836906  info done                      backup=FSTachDEV2_20240618 operation=restore
root@FSTachDEV3:~# clickhouse-client
FSTachDEV3 :) show databases;
   ┌─name───────────────┐
1. │ INFORMATION_SCHEMA │
2.default3. │ information_schema │
4. │ lukestest1         │
5. │ lukestest2         │
6. │ system             │
   └────────────────────┘
FSTachDEV3 :) use lukestest1;
FSTachDEV3 :) show tables;
   ┌─name──────────────┐
1. │ table88_mergetree │
2. │ table_mergetree   │
   └───────────────────┘
FSTachDEV3 :) select * from table_mergetree;
   ┌─id─┬─────────create_time─┐
1.12020-11-17 08:00:002.102020-11-17 08:00:003.112020-11-17 08:00:004.122020-11-17 08:00:00 │
   └────┴─────────────────────┘
FSTachDEV3 :) select * from table88_mergetree;
   ┌─id───┬─────────create_time─┐
1.881970-01-01 00:00:002.8881970-01-01 00:00:003.88881970-01-01 00:00:00 │
   └──────┴─────────────────────┘
FSTachDEV3 :) use lukestest2;
FSTachDEV3 :) show tables;
   ┌─name──────────────┐
1. │ table99_mergetree │
2. │ table_mergetree   │
   └───────────────────┘
FSTachDEV3 :) select * from table_mergetree;
   ┌─id─┬─────────create_time─┐
1.52020-11-17 08:00:002.62020-11-17 08:00:003.72020-11-17 08:00:004.82020-11-17 08:00:005.92020-11-17 08:00:00 │
   └────┴─────────────────────┘
FSTachDEV3 :) select * from table99_mergetree;
   ┌─id──┬─────────create_time─┐
1.991999-09-09 07:00:002.9991999-09-09 07:00:00 │
   └─────┴─────────────────────┘

个人备份脚本(配置了backups_to_keep_local和backups_to_keep_remote的话,代码里面的那段删除30天之前的备份代码就可以不用写了)
root@DDLACHDBDEV001:/usr/lib/systemd/system# cat /root/script/clickhouse_backup.sh

#!/bin/bash


backupdate=`date +%Y%m%d`
deletedate=`date -d '30 days ago' +%Y%m%d`
echo "  Begin to delete `date -d '30 days ago' +%Y%m%d` backup dir...">>/root/clickhouse_backuplog/clickhouse_backup_$backupdate.log
/bin/rm -rf /mnt/datadomaindir/clickhouse_backup/Dev/DDLACHDBDEV001/$deletedate
if [ $? -eq 0 ]; then
echo "  Delete `date -d '30 days ago' +%Y%m%d` backup dir successfully !">>/root/clickhouse_backuplog/clickhouse_backup_$backupdate.log
fi

echo " ">>/root/clickhouse_backuplog/clickhouse_backup_$backupdate.log
echo "++++++++++++++++++++++++++++++++++++++++++++++++">>/root/clickhouse_backuplog/clickhouse_backup_$backupdate.log
echo "  Begin to backup...">>/root/clickhouse_backuplog/clickhouse_backup_$backupdate.log

clickhouse-backup create $backupdate >>/root/clickhouse_backuplog/clickhouse_backup_$backupdate.log 2>&1
clickhouse-backup upload $backupdate >>/root/clickhouse_backuplog/clickhouse_backup_$backupdate.log 2>&1
  • 20
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值