我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

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

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

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

MyBatis视图在数据备份恢复中的恢复脚本编写

在使用 MyBatis 进行数据库操作时,视图(View)是一种虚拟表,它是基于 SQL 查询结果的。在数据备份恢复过程中,可能需要恢复视图的数据。以下是如何编写恢复脚本来实现这一目标:1. 备份视图结构首先,需要备份视图的结构。可以使
MyBatis视图在数据备份恢复中的恢复脚本编写
2024-10-14

分享一个MySQL binlog 远程备份脚本

从MySQL5.6开始,mysqlbinlog支持将远程服务器上的binlog实时复制到本地服务器上。mysqlbinlog的实时二进制复制功能并非简单的将远程服务器的日志复制过来,它是通过MySQL 5.6公布的Replication API实时获取二进制事

	分享一个MySQL binlog 远程备份脚本
2019-12-18

MyBatis视图与数据库备份恢复中的备份数据版本管理

MyBatis是一个半自动ORM映射工具,它主要用于简化数据库操作,提高开发效率,并不直接涉及数据库备份恢复中的备份数据版本管理。数据库备份恢复中的备份数据版本管理主要依赖于数据库管理系统(DBMS)提供的工具或第三方工具来实现。以下是关于
MyBatis视图与数据库备份恢复中的备份数据版本管理
2024-10-14

虚拟机备份与恢复的主要方法

服务器虚拟化,它能解决服务器扩充、资源消耗、能源消耗,高可用等相关的问题,为用户带来诸多的益处,但同时也会带来一些新的相关问题点,最突出的就是如何保证虚拟机数据的安全性,即使可以做备份,但如何保证数据一致性是当中最大的挑战。

Oracle数据库ODBC连接与数据库备份恢复脚本自动化

Oracle数据库ODBC连接与数据库备份恢复脚本自动化可以通过以下步骤实现:安装Oracle ODBC驱动程序:首先需要安装Oracle ODBC驱动程序,以便能够通过ODBC连接Oracle数据库。创建ODBC数据源:在控制面板中找到O
Oracle数据库ODBC连接与数据库备份恢复脚本自动化
2024-07-16

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录