文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

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

2024-12-14 00:29

关注

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 

  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)、下载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, 
  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  [-t, --tables=.
     
  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 
  31. 查看全部默认的配置项

    1. clickhouse-backup default-config 

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

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

    创建备份

    #全库备份

    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=.
     

    备份表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 

    查看备份记录

    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=.
    ] [-s, --schema] [-d, --data] [--rm, --drop]  
  32.  
  33. OPTIONS: 
  34.    --config FILE, -c FILE                   Config FILE name. (default: "/etc/clickhouse-backup/config.yml") [$CLICKHOUSE_BACKUP_CONFIG] 
  35.    --table value, --tables value, -t value   
  36.    --schema, -s                             Restore schema only 
  37.    --data, -d                               Restore data only 
  38.    --rm, --drop                             Drop table before restore 
  39. 参数:

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

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

    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 :)  

    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 {}" 

    六、常见问题

    问题现象:使用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 

     

来源:今日头条内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯