• Clickhouse学习笔记(15)—— Clickhouse备份


    手动备份

    参考官网:Backup and Restore | ClickHouse Docs

    简单来说,就是我们可以通过ALTER TABLE ... FREEZE PARTITION ...命令为表分区创建一个本地副本,然后这个副本硬链接/var/lib/clickhouse/shadow/文件夹,因此其不会耗费额外的硬盘空间

    而且为了防止硬件问题,最好将该副本拷贝到其他的位置并且删除该本次副本;

    接下来依照此思路进行试验:

    本次备份

    首先按创建用于存放备份数据的目录 shadow

    sudo mkdir -p /var/lib/clickhouse/shadow/

    执行备份命令:(对表t_order_mt进行备份)

    echo -n 'alter table t_order_mt freeze' | clickhouse-client

    有关表t_order_mt可以参考

    Clickhouse学习笔记(3)—— Clickhouse表引擎-CSDN博客

    中MergeTree(合并树)部分

    完成数据本地副本的备份之后查看其中的内容:

    与原数据文件对比:

    发现该副本是从/var/lib/clickhouse/store文件夹下直接拷贝的数据;


    存储到其他路径

    接下来将备份数据保存到其他路径:

    创建backup文件夹:sudo mkdir -p /var/lib/clickhouse/backup/

    拷贝数据:sudo cp -r /var/lib/clickhouse/shadow/ /var/lib/clickhouse/backup/t_order_mt

    为下次备份准备,删除 shadow 下的数据:sudo rm -rf /var/lib/clickhouse/shadow/*


    数据恢复

    • 删除备份过的表:echo ' drop table t_order_mt ' | clickhouse-client
    • 重新创建表;
    • 然后备份复制到 detached 目录:sudo cp -rl /var/lib/clickhouse/backup/t_order_mt/1/store/092/092cf360-d509-4379-892c-f360d509d379/* /var/lib/clickhouse/data/default/t_order_mt/detached/
    • 执行attach:echo 'alter table t_order_mt attach partition 20200601' | clickhouse-client
    • 查看数据:

    clickhouse-backup

    clickhouse的自动化备份工具,下载地址:https://github.com/AlexAkulov/clickhouse-backup/

    首先上传并安装(rpm):sudo rpm -ivh clickhouse-backup-1.0.0-1.x86_64.rpm

    该工具由两部分组成:

    ①配置文件,路径:/etc/clickhouse-backup/config.yml

    注意:1.0.0不支持hdfs

    ②命令:/usr/bin/clickhouse-backup

    常用操作

    查看可用命令:clickhouse-backup help

    显示要备份的表: clickhouse-backup tables

    创建备份:clickhouse-backup create

    创建完成后在/var/lib/clickhouse/backup文件夹中可以看到备份文件:

    可以通过–name 标志指定备份名称

    查看现有的本地备份:clickhouse-backup list

    从备份恢复数据:sudo clickhouse-backup restore 2023-08-07T06-58-10

    首先删除表t_order_mtecho 'drop table t_order_mt' | clickhouse-client

    但是删除完成后发现store文件夹中依旧存在该表对应的数据文件:

    可知此时还未完全删除

    如果执行备份语句会报错:

    但是无论是metadata还是store文件夹中,对应的sql语句都已删除

    于是手动删除store文件夹下t_order_mt表对应的数据,之后重试备份恢复:

    又有报错,但此时可以看到store中相应的数据已经恢复;

    但此时去查询表是查不到的,而且再次备份又会出现同样的报错.......


    解决方法:

    先还原表结构:clickhouse-backup restore 2023-08-07T06-58-10 --schema

    再还原数据:clickhouse-backup restore 2023-08-07T06-58-10 --data

    --table 参数:备份(或还原)特定表。也可以使用一个正则表达式,例如,针对特定的数据库:--table=dbname.*


    其他注意事项:

    (1)API 文档:https : //github.com/AlexAkulov/clickhouse-backup#api

    (2)注意事项:切勿更改文件夹/var/lib/clickhouse/backup 的权限,可能会导致数据损坏

    (3)远程备份

    ➢ 较新版本才支持,需要设置 config 里的 s3 相关配置

    ➢ 上传到远程存储:sudo clickhouse-backup upload xxxx

    ➢ 从远程存储下载:sudo clickhouse-backup download xxxx

    ➢ 保存周期: backups_to_keep_local,本地保存周期,单位天backups_to_keep_remote,远程存储保存周期,单位天0 均表示不删除

  • 相关阅读:
    c++文件服务器相关知识点记录-1
    【LaTex】如何输入英文字母的花体字?花体字最全总结
    【C++初阶】STL详解(二)string类的模拟实现
    第四章. Pandas进阶—数据转换
    GPT实战系列-使用LangChain内部工具
    基于springboot的在线管理管理系统
    用57000字讲解完2022年Java岗面试最常问的100道题,太肝了
    【深入浅出系列】之代码可读性
    js根据预设条件定义数组元素
    Flink Table API & SQL
  • 原文地址:https://blog.csdn.net/qq_51235856/article/details/134399295