不小心把clickhouse的数据文件删了,还可以恢复吗? 您所在的位置:网站首页 打了狗一顿后还能恢复之前的关系吗 不小心把clickhouse的数据文件删了,还可以恢复吗?

不小心把clickhouse的数据文件删了,还可以恢复吗?

2024-06-07 11:51| 来源: 网络整理| 查看: 265

我相信对于想要在生产环境使用clickhouse的童鞋来说,肯定会关注数据存储可靠性的问题,要实现这个目的常用的三种方法:

底层磁盘做RAID : 这个方法就和CH本身没关系了,属于硬件层面的保护机制利用CH提供的ReplicatedMergeTree引擎做多副本的存储,这是本文要关注的重点,稍后详细来说定期做数据的备份,需要还原时手动执行命令进行导入,这种方式详见前文

下文将要描述的均是在做了副本的前提下,还是老样子,我们用问答的方式来开启探索之旅吧~~

Q1: 单刀直入吧,就说不小心把数据文件删了,能不能恢复呢?

答案肯定是能的,但前提就是我上面说的用ReplicatedMergeTree引擎做了副本,且副本数据没有损坏。

Q2: 会自动恢复吗?还是需要执行什么命令?

额,我只能说是半自动的,因为如果你不小心删了一个parts目录下的bin文件,系统是不会自动检测出来的,除非你重启服务(我想大多数情况下我们肯定不愿意这样做。。)。那什么时候检测呢?当你再次select查询该表的时候,就会立即触发检测,第一次select查询会给你抛出一个异常,提示该块对应的文件找不到了,如下图: 在这里插入图片描述 再次查询就不会报错了,当然你也在这个本地表里查不到丢失的数据了,那你这不是骗人吗?不是说可以自动恢复的吗?别急,因为你急也没有用,因为CH在后台已经检测出来数据丢失了,它会将数据恢复的任务丢到一个队列里,但是它不会马上去执行队列里的任务,而是会等一段时间,具体多长时间我也不确定,我这边的观察是大概等了十分钟,再去查丢失的数据的时候发现数据已经恢复了。那我必须等这么长时间吗?能不能马上触发自动恢复呢?很遗憾,我没有找到相应的方法,如果有哪位朋友知道,欢迎留言~~

Q3: 那你怎么知道后台有任务在排队执行呢?

两种方法:

一是看日志/var/log/clickhouse-server/clickhouse-server.log,再次查询的时候能看到ReplicatedMergeTreePartCheckThread的日志 在这里插入图片描述查看系统表system.replication_queue Q4: 稍微深入一点儿吧,它怎么判断我文件损坏的呢?

那肯定是离不开你的zookeeper兄弟呀,zookeeper里记录了每个分片和副本的元数据信息,检查线程会比较本地文件与zk上的元数据是否一致,如果不一致,就会将之前的parts目录移动到detached目录下,并将parts目录名加上前缀broken,并往队列里写入一个后台任务,告诉它从副本节点上去取。这个任务在真正被调用的时候呢,就会向副本节点发起请求,从远端把丢失的数据拷贝回来。

这是有zk的情况下,万一zk不工作了呢?还是会检查到,但这次它把parts目录移动到detached目录下之后,加的前缀变成了unexpected,这个时候就不会有后台任务被提交了,也就没有办法自动恢复了。

总结

简单总结一下吧,丢失数据恢复的三个条件:

该表使用了ReplicatedMergeTree引擎zookeeper正常工作副本文件在此期间没有损坏

满足上述三个条件,你的数据就会多一分安全了~~



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

      专题文章
        CopyRight 2018-2019 实验室设备网 版权所有