Clickhouse备份与恢复+异机远程备份脚本

数据库 其他数据库
Clickhouse 的数据备份有多种方式,其官方网站上就提供了多种备份方式可以参考,但是不同公司有不同的可用资源和业务需求,因此不存在一个通用的解决方案可以应对各种情况下的ClickHouse备份和恢复。

[[422996]]

Clickhouse 的数据备份有多种方式,其官方网站上就提供了多种备份方式可以参考,但是不同公司有不同的可用资源和业务需求,因此不存在一个通用的解决方案可以应对各种情况下的ClickHouse备份和恢复。 适用于 1GB 数据的方案可能并不适用于几十 PB 数据的情况。 有多种具备各自优缺点的可能方法,将在下面对其进行讨论。最好使用几种方法而不是仅仅使用一种方法来弥补它们的各种缺点。

背景:

某项目clickhouse 数据库迁移,数据量大约9亿条单表,版本为clickhouse20,迁移前我先在本地做了一些列的备份测试,下面我把我在生产中选用的备份方法和遇到的种种小插曲和大家分享下

实验环境:

官网下载的demo数据,大约有8G的测试数据

clickhouse 20.4.6

一、 文本文件导入导出

#说白了就是手动的把数据库里的数据导出成特定的格式,再导入;这种方式!!不推荐!!!!除非你的数据库真的很少,我当时从官网下载了一个demo 数据,手动导入导出,差点把我累死

导出:

  1. clickhouse-client --password helloword --query="select * from iot_dev.t_indicator_record FORMAT CSV" > iot_dev.t_indicator_record.csv 

导入: 注意FORMAT后面大写

  1. cat iot_dev.t_indicator_record.csv | clickhouse-client --port 9008 --password helloword --query="INSERT INTO iot_dev.t_indicator_record FORMAT CSV" 

二、 拷贝数据目录

#此方案和mysql 的冷数据恢复是一个方案,直接拷贝走clickhouse 的数据到另一台机器上,修改下相关配置就可以直接启动了,仔细的观察一下 ClickHouse 在文件系统上的目录结构(配置文件

/ect/clickhouse-server/config.xml 里面配置的 ),为了便于查看,只保留了 data 和 metadata 目录。

  1. ├── data 
  2. │   ├── default 
  3. │   ├── system 
  4. │   │   ├── asynchronous_metric_log 
  5. │   │   ├── metric_log 
  6. │   │   ├── query_log 
  7. │   │   ├── query_thread_log 
  8. │   │   └── trace_log 
  9. ├── metadata 
  10. │   ├── default 
  11. │   │   └── v_table_size.sql 
  12. │   ├── default.sql 
  13. │   ├── system 
  14. │   │   ├── asynchronous_metric_log.sql 
  15. │   │   ├── metric_log.sql 
  16. │   │   ├── query_log.sql 
  17. │   │   ├── query_thread_log.sql 
  18. │   │   └── trace_log.sql 
Clickhouse备份与恢复+异机远程备份脚本
  1. data 目录里保存的是数据,每个数据库一个目录,内部每个表一个子目录。 
  2. metadata 目录里保存的是元数据,即数据库和表结构。其中 
  3.         <database>.sql 是 创建数据库的 DDL(ATTACH DATABASE default ENGINE = Ordinary) 
  4.         <database>/<table>.sql 是建表的 DDL (ATTACH TABLE ...) 

基于这个信息,直接把data和metadata目录(要排除 system 库)复制到新集群,即可实现数据迁移

实操步骤:

  1. 1、停止原先的clickhouse数据库,并打包好 对应数据库或表的 data 和 metadata 数据 
  2. 2、拷贝到目标clickhouse数据库对应的目录,比如/var/lib/clickhouse 目录下 
  3. 3、给clickhouse 赋予权限, chown -Rf clickhouse:clickhouse /var/lib/clickhouse/* 
  4.                                                       chown -Rf clickhouse:clickhouse /var/lib/clickhouse 
  5. 4、重启目标clickhouse数据库 
  6. 5、验证数据 
  7.         select count(1) form iot_dev.t_indicator_record; 

三、 使用第三方工具,clickhouse-backup

此方案,是我在测试的过程中使用最方便的备份与恢复工具,因此我会详细的说下此工具的使用方法及需要注意的地方。

clickhouse-backup 是社区开源的一个 ClickHouse 备份工具,可用于实现数据迁移。其原理是先创建一个备份,然后从备份导入数据,类似 MySQL 的 mysqldump + SOURCE。这个工具可以作为常规的异地冷备方案

# 使用限制:

  • 支持1.1.54390以上的ClickHouse
  • 仅MergeTree系列表引擎
  • 不支持备份Tiered storage或storage_policy
  • 云存储上的最大备份大小为5TB
  • AWS S3上的parts数最大为10,000

(1)、下载clickhouse-backup 软件包

官方提供了二进制版本和rpm包的方式,我这里采用了二进制安装

  1. github地址: https://github.com/AlexAkulov/clickhouse-backup 
  2.  
  3. 下载地址: https://github.com/AlexAkulov/clickhouse-backup/releases/download/v1.0.0/clickhouse-backup.tar.gz 
  1. #解压软件包 
  2. tar -xf clickhouse-backup.tar.gz -C /root 
  3.  
  4. #复制二进制文件到系统中 
  5. cp /root/clickhouse-backup /usr/bin 
  6.  
  7. #创建clickhouse-backup 配置文件目录 
  8. mkdir -p /etc/clickhouse-backup 
  9.  
  10. #拷贝模板配置文件到clickhouse-backup 配置文件目录下 
  11. cp /root/config.yml /etc/clickhouse-backup/ 

(2)、修改clickhouse-backup 配置文件config.yml

# 根据clickhouse自身的配置来修改 此配置文件,比如 clickhouse的数据目录,数据库密码,监控地址及端口

官方的配置说明:

clickhouse-backup 除了备份到本机,此外还支持远程备份的方式,备份到s3 上【对象存储】,ftp,sftp 上,还支持 使用 api 接口 访问

  1. general: 
  2.   remote_storage: none           # REMOTE_STORAGE,远程备份的方式,对应下面的【azblo,s3,gcs,api,ftp,sftp】 
  3.   max_file_size: 107374182400    # MAX_FILE_SIZE 
  4.   disable_progress_bar: false    # DISABLE_PROGRESS_BAR 
  5.   backups_to_keep_local: 0       # BACKUPS_TO_KEEP_LOCAL, 本地备份保留个数 ,0为不限制 
  6.   backups_to_keep_remote: 0      # BACKUPS_TO_KEEP_REMOTE,远程的备份保留个数,0为不限制 
  7.   log_level: info                # LOG_LEVEL,日志等级 
  8.   allow_empty_backups: false     # ALLOW_EMPTY_BACKUPS 
  9. clickhouse: 
  10.   username: default                # CLICKHOUSE_USERNAME,数据库用户名,默认 
  11.   password""                     # CLICKHOUSE_PASSWORD,数据库密码 
  12.   host: localhost                  # CLICKHOUSE_HOST,数据库实例地址 
  13.   port: 9000                       # CLICKHOUSE_PORT,数据库连接端口 
  14.   disk_mapping: {}                 # CLICKHOUSE_DISK_MAPPING 
  15.   skip_tables:                     # CLICKHOUSE_SKIP_TABLES ,备份时,需要忽略的库表 
  16.     - system.* 
  17.   timeout: 5m                      # CLICKHOUSE_TIMEOUT 
  18.   freeze_by_part: false            # CLICKHOUSE_FREEZE_BY_PART 
  19.   secure: false                    # CLICKHOUSE_SECURE 
  20.   skip_verify: false               # CLICKHOUSE_SKIP_VERIFY 
  21.   sync_replicated_tables: true     # CLICKHOUSE_SYNC_REPLICATED_TABLES 
  22.   log_sql_queries: true            # CLICKHOUSE_LOG_SQL_QUERIES 
  23.  
  24.   config_dir:      "/etc/clickhouse-server"              # CLICKHOUSE_CONFIG_DIR 
  25.   restart_command: "systemctl restart clickhouse-server" # CLICKHOUSE_RESTART_COMMAND 
  26.  
  27. azblob: 
  28.   endpoint_suffix: "core.windows.net" # AZBLOB_ENDPOINT_SUFFIX 
  29.   account_name: ""             # AZBLOB_ACCOUNT_NAME 
  30.   account_key: ""              # AZBLOB_ACCOUNT_KEY 
  31.   sas: ""                      # AZBLOB_SAS 
  32.   container: ""                # AZBLOB_CONTAINER 
  33.   path: ""                     # AZBLOB_PATH 
  34.   compression_level: 1         # AZBLOB_COMPRESSION_LEVEL 
  35.   compression_format: tar      # AZBLOB_COMPRESSION_FORMAT 
  36.   sse_key: ""                  # AZBLOB_SSE_KEY 
  37. s3: 
  38.   access_key: ""                   # S3_ACCESS_KEY,<AWS访问密钥> 
  39.   secret_key: ""                   # S3_SECRET_KEY 
  40.   bucket: ""                       # S3_BUCKET,<存储桶BUCKET名称> 
  41.   endpoint: ""                     # S3_ENDPOINT 
  42.   region: us-east-1                # S3_REGION 
  43.   acl: private                     # S3_ACL 
  44.   force_path_style: false          # S3_FORCE_PATH_STYLE 
  45.   path: ""                         # S3_PATH , <备份路径> 
  46.   disable_ssl: false               # S3_DISABLE_SSL 
  47.   compression_level: 1             # S3_COMPRESSION_LEVEL 
  48.   # supports 'tar''gzip''zstd''brotli' 
  49.   compression_format: tar          # S3_COMPRESSION_FORMAT 
  50.   # empty (default), AES256, or aws:kms 
  51.   sse: AES256                      # S3_SSE 
  52.   disable_cert_verification: false # S3_DISABLE_CERT_VERIFICATION 
  53.   storage_class: STANDARD          # S3_STORAGE_CLASS 
  54.   debug: false                     # S3_DEBUG 
  55. gcs: 
  56.   credentials_file: ""         # GCS_CREDENTIALS_FILE 
  57.   credentials_json: ""         # GCS_CREDENTIALS_JSON 
  58.   bucket: ""                   # GCS_BUCKET 
  59.   path: ""                     # GCS_PATH 
  60.   compression_level: 1         # GCS_COMPRESSION_LEVEL 
  61.   compression_format: tar      # GCS_COMPRESSION_FORMAT 
  62. cos: 
  63.   url: ""                      # COS_URL 
  64.   timeout: 2m                  # COS_TIMEOUT 
  65.   secret_id: ""                # COS_SECRET_ID 
  66.   secret_key: ""               # COS_SECRET_KEY 
  67.   path: ""                     # COS_PATH 
  68.   compression_format: tar      # COS_COMPRESSION_FORMAT 
  69.   compression_level: 1         # COS_COMPRESSION_LEVEL 
  70. api: 
  71.   listen: "localhost:7171"     # API_LISTEN 
  72.   enable_metrics: true         # API_ENABLE_METRICS 
  73.   enable_pprof: false          # API_ENABLE_PPROF 
  74.   username: ""                 # API_USERNAME 
  75.   password""                 # API_PASSWORD 
  76.   secure: false                # API_SECURE 
  77.   certificate_file: ""         # API_CERTIFICATE_FILE 
  78.   private_key_file: ""         # API_PRIVATE_KEY_FILE 
  79.   create_integration_tables: false # API_CREATE_INTEGRATION_TABLES 
  80. ftp: 
  81.   address: ""                  # FTP_ADDRESS 
  82.   timeout: 2m                  # FTP_TIMEOUT 
  83.   username: ""                 # FTP_USERNAME 
  84.   password""                 # FTP_PASSWORD 
  85.   tls: false                   # FTP_TLS 
  86.   path: ""                     # FTP_PATH 
  87.   compression_format: tar      # FTP_COMPRESSION_FORMAT 
  88.   compression_level: 1         # FTP_COMPRESSION_LEVEL 
  89.   debug: false                 # FTP_DEBUG 
  90. sftp: 
  91.   address: ""                  # SFTP_ADDRESS 
  92.   username: ""                 # SFTP_USERNAME 
  93.   password""                 # SFTP_PASSWORD 
  94.   key""                      # SFTP_KEY 
  95.   path: ""                     # SFTP_PATH 
  96.   compression_format: tar      # SFTP_COMPRESSION_FORMAT 
  97.   compression_level: 1         # SFTP_COMPRESSION_LEVEL 

 我本次使用的配置文件,就是最简单的配置,直接本地备份,然后通过执行脚本的方式去推送备份文件到备份主机上

  1. [root@localhost clickhouse-backup]# cat config.yml  
  2.  
  3. general: 
  4.   max_file_size: 1099511627776 
  5.   disable_progress_bar: false 
  6.   backups_to_keep_local: 0 
  7.   backups_to_keep_remote: 0 
  8.   log_level: info 
  9.   allow_empty_backups: false 
  10. clickhouse: 
  11.   username: default 
  12.   password"" 
  13.   host: localhost 
  14.   port: 9000 
  15.   disk_mapping: {} 
  16.   skip_tables: 
  17.   - system.* 
  18.   - default.* 
  19.   timeout: 5m 
  20.   freeze_by_part: false 
  21.   secure: false 
  22.   skip_verify: false 
  23.   sync_replicated_tables: true 
  24.   skip_sync_replica_timeouts: true 
  25.   log_sql_queries: false 

 (3)、查看clickhouse-backup 相关命令

  1. NAME
  2.    clickhouse-backup - Tool for easy backup of ClickHouse with cloud support 
  3.  
  4. USAGE: 
  5.    clickhouse-backup <command> [-t, --tables=<db>.<table>] <backup_name> 
  6.  
  7. VERSION: 
  8.    1.0.0 
  9.  
  10. DESCRIPTION: 
  11.    Run as 'root' or 'clickhouse' user 
  12.  
  13. COMMANDS: 
  14.    tables          Print list of tables 
  15.    create          Create new backup 
  16.    create_remote   Create and upload 
  17.    upload          Upload backup to remote storage 
  18.    list            Print list of backups 
  19.    download        Download backup from remote storage 
  20.    restore         Create schema and restore data from backup 
  21.    restore_remote  Download and restore 
  22.    delete          Delete specific backup 
  23.    default-config  Print default config 
  24.    server          Run API server 
  25.    help, h         Shows a list of commands or help for one command 
  26.  
  27. GLOBAL OPTIONS: 
  28.    --config FILE, -c FILE  Config FILE name. (default: "/etc/clickhouse-backup/config.yml") [$CLICKHOUSE_BACKUP_CONFIG] 
  29.    --help, -h              show help 
  30.    --version, -v           print the version 

1、 查看全部默认的配置项

  1. clickhouse-backup default-config 

2、 查看可备份的表【已在配置文件中过滤掉system和default 库下面的所有表】

  1. [root@localhost clickhouse-backup]# clickhouse-backup tablesbrdatasets.hits_v1  1.50GiB  default  

3、 创建备份

#全库备份

  1. clickhouse-backup create 
  2. 2021/09/06 10:03:23  info done                      backup=2021-09-06T14-03-23 operation=create table=datasets.hits_v1 
  3. 2021/09/06 10:03:23  info done                      backup=2021-09-06T14-03-23 operation=create 

备份存储在中 $data_path/backup 下,备份名称默认为时间戳,可手动指定备份名称

  1. clickhouse-backup create fxkjnj_0906 

备份包含两个目录:

  • metadata目录: 包含重新创建所需的DDL SQL
  • shadow目录: 包含作为ALTER TABLE ... FREEZE操作结果的数据
  1. [root@localhost backup]# ll /var/lib/clickhouse/backup/2021-09-06T14-03-23/ 
  2. total 4 
  3. drwxr-x--- 3 clickhouse clickhouse  22 Sep  6 10:03 metadata 
  4. -rw-r----- 1 clickhouse clickhouse 865 Sep  6 10:03 metadata.json 
  5. drwxr-x--- 3 clickhouse clickhouse  22 Sep  6 10:03 shadow 

 #单表备份

  1. clickhouse-backup create [-t, --tables=<db>.<table>] <backup_name> 

备份表datasets.hits_v1

  1. clickhouse-backup create  -t datasets.hits_v1 

备份多个表datasets.hits_v1, datasets.hits_v2

  1. clickhouse-backup create  -t datasets.hits_v1,datasets.hits_v2 

4、查看备份记录

  1. [root@localhost datasets]# clickhouse-backup list 
  2. 2021-09-06T14-03-23   1.50GiB   06/09/2021 14:03:23   local       
  3. 2021/09/06 10:10:50 error InvalidParameter: 1 validation error(s) found. 
  4. - minimum field size of 1, ListObjectsV2Input.Bucket. 

 5、删除备份文件

  1. [root@localhost datasets]# clickhouse-backup delete local 2021-09-06T14-03-23 

(4)、数据恢复

语法:

clickhouse-backup restore 备份名

  1. [root@localhost shadow]# clickhouse-backup restore --help 
  2. NAME
  3.    clickhouse-backup restore - Create schema and restore data from backup 
  4.  
  5. USAGE: 
  6.    clickhouse-backup restore  [-t, --tables=<db>.<table>] [-s, --schema] [-d, --data] [--rm, --drop] <backup_name> 
  7.  
  8. OPTIONS: 
  9.    --config FILE, -c FILE                   Config FILE name. (default: "/etc/clickhouse-backup/config.yml") [$CLICKHOUSE_BACKUP_CONFIG] 
  10.    --table value, --tables value, -t value   
  11.    --schema, -s                             Restore schema only 
  12.    --data, -d                               Restore data only 
  13.    --rm, --drop                             Drop table before restore 

参数:

  • --table 只恢复特定表,可使用正则。如针对特定的数据库:--table=dbname.*
  • --schema 只还原表结构
  • --data 只还原数据
  • --rm 数据恢复之前,先删除需要恢复的表

四、使用clickhouse-backup备份与恢复数据-实战

4.1 、本机备份与恢复

1、备份前,先查看数据库里的数据量,一共是17747796条数据

  1. 1、备份前,先查看数据库里的数据量,一共是17747796条数据 
  2. [root@localhost ~]# clickhouse-client 
  3. ClickHouse client version 20.4.6.53 (official build). 
  4. Connecting to localhost:9000 as user default
  5. Connected to ClickHouse server version 20.4.6 revision 54434. 
  6. localhost :)  
  7. localhost :) select count(1) from datasets.hits_v1; 
  8.  
  9. SELECT count(1) 
  10. FROM datasets.hits_v1 
  11.  
  12. ┌─count(1)─┐ 
  13. │ 17747796 │ 
  14. └──────────┘ 
  15.  
  16. rows in set. Elapsed: 0.016 sec.  
  17.  
  18. localhost :) exit 
  19.  
  20.  
  21.  
  22. 2、创建clickhouse-backup配置文件,本地备份文件最多保留7个 
  23.  
  24. [root@localhost ~]# vim /etc/clickhouse-backup/config.yml  
  25. general: 
  26.   max_file_size: 1099511627776 
  27.   disable_progress_bar: false 
  28.   backups_to_keep_local: 7 
  29.   log_level: info 
  30.   allow_empty_backups: false 
  31. clickhouse: 
  32.   username: default 
  33.   password"helloword" 
  34.   host: localhost 
  35.   port: 9000 
  36.   disk_mapping: {} 
  37.   skip_tables: 
  38.   - system.* 
  39.   - default.* 
  40.   timeout: 5m 
  41.   freeze_by_part: false 
  42.   secure: false 
  43.   skip_verify: false 
  44.   sync_replicated_tables: true 
  45.   skip_sync_replica_timeouts: true 
  46.   log_sql_queries: false 
  47.  
  48.  
  49. 3、查看可备份的表 
  50. [root@localhost backup]# clickhouse-backup tables 
  51. datasets.hits_v1  1.50GiB  default   
  52.  
  53.  
  54. 4、使用clickhouse-backup 做个备份 
  55. [root@localhost clickhouse]# clickhouse-backup create 
  56. 2021/09/06 10:50:42  info done                      backup=2021-09-06T14-50-42 operation=create table=datasets.hits_v1 
  57. 2021/09/06 10:50:42  info done                      backup=2021-09-06T14-50-42 operation=create 
  58.  
  59.  
  60.  
  61. 5、模拟进行数据破坏,!!!生产环境勿用!!!此处为测试 
  62. [root@localhost clickhouse]# clickhouse-client  
  63. ClickHouse client version 20.4.6.53 (official build). 
  64. Connecting to localhost:9000 as user default
  65. Connected to ClickHouse server version 20.4.6 revision 54434. 
  66.  
  67. localhost :) drop database datasets; 
  68. DROP DATABASE datasets 
  69. Ok. 
  70. rows in set. Elapsed: 0.002 sec.  
  71.  
  72. SHOW DATABASES 
  73. ┌─name───────────────────────────┐ 
  74. │ _temporary_and_external_tables │ 
  75. │ default                        │ 
  76. │ system   
  77. │ test 
  78. └────────────────────────────────┘ 
  79. rows in set. Elapsed: 0.002 sec.  
  80.  
  81.  
  82.  
  83.  
  84. 6、恢复数据库 
  85. [root@localhost backup]# clickhouse-backup restore 2021-09-06T14-50-42 -s -d --rm 
  86. 2021/09/06 10:57:04  info done                      backup=2021-09-06T14-50-42 operation=restore table=datasets.hits_v1 
  87. 2021/09/06 10:57:04  info done                      backup=2021-09-06T14-50-42 operation=restore 
  88.  
  89.  
  90. 7、验证数据库,查看数据是否复原,数据量是否匹配 
  91.  
  92. [root@localhost backup]# clickhouse-client  
  93. ClickHouse client version 20.4.6.53 (official build). 
  94. Connecting to localhost:9000 as user default
  95. Connected to ClickHouse server version 20.4.6 revision 54434. 
  96.  
  97. localhost :) show databases; 
  98.  
  99. SHOW DATABASES 
  100. ┌─name───────────────────────────┐ 
  101. │ _temporary_and_external_tables │ 
  102. │ datasets                       │ 
  103. │ default                        │ 
  104. │ system                         │ 
  105. │ test                           │ 
  106. └────────────────────────────────┘ 
  107. rows in set. Elapsed: 0.002 sec.  
  108.  
  109. localhost :) select count(1) from datasets.hits_v1; 
  110.  
  111. SELECT count(1) 
  112. FROM datasets.hits_v1 
  113.  
  114. ┌─count(1)─┐ 
  115. │ 17747796 │ 
  116. └──────────┘ 
  117.  
  118. rows in set. Elapsed: 0.020 sec.  
  119.  
  120. localhost :)  

4.2、异机远程备份与恢复

所谓异机远程备份,就是指将备份好的文件,同步传输到远程 专业的存储服务器,往往这些存储服务器都是大存储,可以备份存储1年甚至几年的数据库备份都没问题

环境:

clickhouse 数据库 192.168.99.102

存储服务器 192.168.99.101

  1. 1、备份前,先查看数据库里的数据量,一共是17747796条数据 
  2. [root@localhost ~]# clickhouse-client 
  3. ClickHouse client version 20.4.6.53 (official build). 
  4. Connecting to localhost:9000 as user default
  5. Connected to ClickHouse server version 20.4.6 revision 54434. 
  6. localhost :)  
  7. localhost :) select count(1) from datasets.hits_v1; 
  8.  
  9. SELECT count(1) 
  10. FROM datasets.hits_v1 
  11.  
  12. ┌─count(1)─┐ 
  13. │ 17747796 │ 
  14. └──────────┘ 
  15.  
  16. rows in set. Elapsed: 0.016 sec.  
  17.  
  18. localhost :) exit 
  19.  
  20.  
  21.  
  22. 2、创建clickhouse-backup配置文件,本地备份文件最多保留7个 
  23.  
  24. [root@localhost ~]# vim /etc/clickhouse-backup/config.yml  
  25. general: 
  26.   max_file_size: 1099511627776 
  27.   disable_progress_bar: false 
  28.   backups_to_keep_local: 7 
  29.   log_level: info 
  30.   allow_empty_backups: false 
  31. clickhouse: 
  32.   username: default 
  33.   password"helloword" 
  34.   host: localhost 
  35.   port: 9000 
  36.   disk_mapping: {} 
  37.   skip_tables: 
  38.   - system.* 
  39.   - default.* 
  40.   timeout: 5m 
  41.   freeze_by_part: false 
  42.   secure: false 
  43.   skip_verify: false 
  44.   sync_replicated_tables: true 
  45.   skip_sync_replica_timeouts: true 
  46.   log_sql_queries: false 
  47.  
  48.  
  49. 3、查看可备份的表 
  50. [root@localhost backup]# clickhouse-backup tables 
  51. datasets.hits_v1  1.50GiB  default   
  52.  
  53.  
  54. 4、使用clickhouse-backup 做个备份 
  55. [root@localhost clickhouse]# clickhouse-backup create 
  56. 2021/09/06 10:50:42  info done                      backup=2021-09-06T14-50-42 operation=create table=datasets.hits_v1 
  57. 2021/09/06 10:50:42  info done                      backup=2021-09-06T14-50-42 operation=create 
  58.  
  59.  
  60.  
  61. 5、使用SCP 将备份文件,传输到存储服务器上 
  62. [root@localhost clickhouse]#  scp -rp /var/lib/clickhouse/backup/2021-09-06T14-50-42 fxkjnj@192.168.99.101:/data/clickhouse-backup/ 
  63.  
  64. 6、登录到存储服务器 ,查看备份数据是否存在 
  65. [root@localhost clickhouse]# ll /data/clickhouse-backup/2021-09-06T14-50-42 
  66. total 4 
  67. drwxr-x--- 3 clickhouse clickhouse  22 Sep  6 10:50 metadata 
  68. -rw-r----- 1 clickhouse clickhouse 865 Sep  6 10:50 metadata.json 
  69. drwxr-x--- 3 clickhouse clickhouse  22 Sep  6 10:50 shadow 

五、使用脚本定期异机远程备份

环境: clickhouse 数据库 192.168.99.102 存储服务器 192.168.99.101

条件:

  • 存储服务器 建立备份目录,/data/clickhouse-back
  • clickhouse 数据库 可以免密到 存储服务器 上,免密传输备份文件
  1. vim  /var/lib/clickhouse/clickhouse-backup.sh 
  2. #!/bin/bash 
  3. #Author        fxkjnj.com 
  4. #################################################### 
  5. ## 
  6. ##      clickhouse-back script 
  7. ##      backup data at remote host 
  8. ##      you should config ssh trust 
  9. ##  
  10. #################################################### 
  11.  
  12.  
  13.  
  14. MSNAME=yz 
  15. BAKFILE=$MSNAME-`date +%Y%m%d%H%M%S` 
  16. LOCAL_BAKDIR=/var/lib/clickhouse/backup 
  17.  
  18. REMOTE_BAKDIR=/data/clickhouse-back 
  19. REMOTE_HOST=root@192.168.99.101 
  20.  
  21.  
  22.  
  23. #备份到本地 
  24. /usr/bin/clickhouse-backup create $BAKFILE 
  25. if [[ $? != 0 ]]; then 
  26.     echo "clickhouse-backup Create FAILED" > /var/log/clickhouse-backup.log 
  27.     exit 
  28. else 
  29. #SCP备份到远程主机 
  30. scp -rp $LOCAL_BAKDIR/$BAKFILE $REMOTE_HOST:$REMOTE_BAKDIR/ 
  31.     if [[ $? != 0 ]]; then 
  32.         echo "clickhouse-backup FAILED" > /var/log/clickhouse-backup.log 
  33.     else 
  34.         echo "clickhouse-backup successful" > /var/log/clickhouse-backup.log 
  35.     fi 
  36. fi 
  37.  
  38.  
  39. #定期删除远程备份文件 
  40. ssh $REMOTE_HOST  "find $REMOTE_BAKDIR/yz* -maxdepth 0 -mtime +30 -type d | xargs rm -rf {}" 

六、常见问题

1、问题现象:使用clickhouse-backup 恢复数据时,提示UUID 问题

  1. clickhouse-backup restore 2021-08-21T06-35-10 -s -d --rm 
  2. 2021/08/21 14:40:51 error can't create table `default`.`t`: code: 57, message:  
  3. Directory for table data store/c57/c5780d8a-7d5a-47a3-8578-0d8a7d5a37a3/ already exists after 1 times, please check your schema depencncies 

 解决方法:

  1. 去掉  备份文件中  ${backup_path}/2021-08-21T06-35-10/metadata/default/t.json 中的UUID 
  2. UUID '80ea6411-9c37-4d47-80ea-64119c374d47' 
  3.  
  4.  
  5. 再次执行恢复 
  6. clickhouse-backup restore 2021-08-21T06-35-10 -s -d --rm 
  7.  
  8. SELECT count(1) 
  9. FROM datasets.hits_v1 
  10.  
  11. ┌─count(1)─┐ 
  12. │ 17747796 │ 
  13. └──────────┘ 
  14.  
  15. rows in set. Elapsed: 0.016 sec.  
  16.  
  17. localhost :) exit 

 

责任编辑:姜华 来源: 今日头条
相关推荐

2010-05-20 11:17:41

虚拟机备份恢复

2010-05-26 10:25:50

MySQLdump增量

2017-05-08 10:08:54

灾备

2022-08-09 11:25:52

数据备份服务器虚拟化磁盘

2011-03-25 13:43:56

CactiEZ备份

2016-11-18 15:42:06

存储

2022-08-26 17:22:12

SQL数据库

2009-06-24 10:44:08

2017-04-27 09:05:08

备份宝灾备

2018-04-17 08:24:58

2013-07-18 10:41:11

VADPSRM

2024-04-18 09:20:43

PostgreSQL关系型数据库数据库管理系统

2017-04-24 14:29:42

存储备份宝灾备

2017-10-14 13:25:40

公有云Azure Site 云服务

2009-04-03 10:54:49

Oracle备份恢复

2014-09-16 16:37:12

NETGEARReadyRECOVE数据备份

2010-04-22 15:14:12

Aix操作系统

2022-02-23 21:10:53

LonghornKubernetes快照

2015-10-21 14:07:17

Oracle备份Oracle恢复

2020-12-16 20:30:24

Linux系统备份系统恢复
点赞
收藏

51CTO技术栈公众号