searchusermenu
  • 发布文章
  • 消息中心
点赞
收藏
评论
分享
原创

Clickhouse 手动恢复数据操作方法

2023-08-25 09:06:30
68
0
 
     如果clickhouse集群某一个节点完全失败无法恢复,则需要进行手动恢复。但是手动恢复的前提是需要节点正常启动(即对应pod进入running状态)。在此前提下才能进行数据的手动恢复。具体操作方法如下:
 

1.恢复pod的running状态。

找到pod对应的数据目录,将数据目录重命名,并再次创建于原来数据目录相同的文件夹
 
如上图所示,将原来的数据目录改为data.bak、log.bak,并再创建data和log目录。然后重启对应pod,即能将pod还原为running状态。
 

2.待pod进入running状态之后,data目录下面应该会自动创建相应的目录。

 
如上图,已经自动创建好相应的数据目录。之后再将我们重命名的数据目录里面的data、metadata和store目录拷贝过来,命名为data_bak、metadata_bak、store_bak。其中metadata是保存的表结构,store是保存的数据,data目录是保存的表与数据的链接关系。
 

3.完成数据拷贝之后,需要先还原表结构。此时先回到master节点,用kubectl exec命令进入到对应的pod中,之后再进入metadata_bak文件夹

 
如图,default代表原来的default库,system代表原来的system库。箭头后面则是具体数据的存储路径,cd到该存储路径下(由于我们拷贝的时候stroe改成了store_bak,所以箭头后面的数据目录中间的store也要改成store_bak).
进入到对应文件夹中(注意store_bak目录,别进到store目录中了)。
 
该目录中保存的即是所有的表结构。此时需要修改对应的内容。这里以scp_vehicle_track_shard.sql为例
 
上图中需要修改红框中的内容,改为下图:
 
即将 ‘ATTACH TABLE _ UUID '7a66f055-72f2-4e2c-952e-6feba2ccb8cd'’ 改为 CREATE TABLE scp_vehicle_track_shard。
之后执行:
clickhouse-client -m --send_logs_level=information --password scsv#ck -d default --multiquery < scp_vehicle_track_shard.sql
命令还原表结构,如果报如下错误:
 
则需要到zookeeper执行删除命令:
1.进入zookeeper pod中(随便一个pod即可)
2.执行 zkCli.sh
3.Deleteall /clickhouse/tables/0/default.scp_jtt_daily_vehicle_shard/replicas/ck-vispdb-replica-0.ck-vispdb-replica-headless.vispdb.svc.cluster.local
(以上操作属于危险操作,需小心核对,避免删错)
zookeeper删除操作执行完成之后,再次还原表结构(不出意外应该成功,如果继续报错,则具体情况具体分析)
 

4.完成表结构还原之后则进行数据还原。进入data_bak目录下面的default目录(即对应的数据库)

 
如上图所示,该目录下面记录了表对应的数据存储路径。找到需要还原的表对应的数据目录,同样store改成store_bak。
 
如上图所示,该目录里面存储的是对应的数据,如果没有数据,则无法完成数据修复(因为数据已经丢了,记住这个目录,待会拷贝会用到)。找到这个目录,并确认数据还在之后,进入到data目录下的default目录中。如下图
 
此时该目录下面应该已经有表对应的连接目录了,进入到需要恢复数据的目录中
 
此时该目录下面应该有一个叫detached的文件夹,进入里面,将刚刚确认的数据拷贝到该目录下面
 

5.此时前期准备工作已完成,接下来进行数据恢复

进入到数据库中(clickhouse-client -m --send_logs_level=information --password scsv#ck)
如上图,执行数据恢复操作,执行:
ALTER TABLE scp_vehicle_track_shard  ATTACH PARTITION 20201130;
这里的PARTITION 对应的当时建表的规则,示例中的PARTITION 就是日期,如20201130的意思是恢复20201130这一天的数据。
 
 
6.到此,整个数据恢复步骤完成。整个操作中,恢复数据结构,和执行数据恢复操作比较繁琐,需要一个一个对应修改,PARTITION 也需要一个一个的对应执行。这里建议使用脚本操作。
0条评论
0 / 1000
李****材
5文章数
0粉丝数
李****材
5 文章 | 0 粉丝
原创

Clickhouse 手动恢复数据操作方法

2023-08-25 09:06:30
68
0
 
     如果clickhouse集群某一个节点完全失败无法恢复,则需要进行手动恢复。但是手动恢复的前提是需要节点正常启动(即对应pod进入running状态)。在此前提下才能进行数据的手动恢复。具体操作方法如下:
 

1.恢复pod的running状态。

找到pod对应的数据目录,将数据目录重命名,并再次创建于原来数据目录相同的文件夹
 
如上图所示,将原来的数据目录改为data.bak、log.bak,并再创建data和log目录。然后重启对应pod,即能将pod还原为running状态。
 

2.待pod进入running状态之后,data目录下面应该会自动创建相应的目录。

 
如上图,已经自动创建好相应的数据目录。之后再将我们重命名的数据目录里面的data、metadata和store目录拷贝过来,命名为data_bak、metadata_bak、store_bak。其中metadata是保存的表结构,store是保存的数据,data目录是保存的表与数据的链接关系。
 

3.完成数据拷贝之后,需要先还原表结构。此时先回到master节点,用kubectl exec命令进入到对应的pod中,之后再进入metadata_bak文件夹

 
如图,default代表原来的default库,system代表原来的system库。箭头后面则是具体数据的存储路径,cd到该存储路径下(由于我们拷贝的时候stroe改成了store_bak,所以箭头后面的数据目录中间的store也要改成store_bak).
进入到对应文件夹中(注意store_bak目录,别进到store目录中了)。
 
该目录中保存的即是所有的表结构。此时需要修改对应的内容。这里以scp_vehicle_track_shard.sql为例
 
上图中需要修改红框中的内容,改为下图:
 
即将 ‘ATTACH TABLE _ UUID '7a66f055-72f2-4e2c-952e-6feba2ccb8cd'’ 改为 CREATE TABLE scp_vehicle_track_shard。
之后执行:
clickhouse-client -m --send_logs_level=information --password scsv#ck -d default --multiquery < scp_vehicle_track_shard.sql
命令还原表结构,如果报如下错误:
 
则需要到zookeeper执行删除命令:
1.进入zookeeper pod中(随便一个pod即可)
2.执行 zkCli.sh
3.Deleteall /clickhouse/tables/0/default.scp_jtt_daily_vehicle_shard/replicas/ck-vispdb-replica-0.ck-vispdb-replica-headless.vispdb.svc.cluster.local
(以上操作属于危险操作,需小心核对,避免删错)
zookeeper删除操作执行完成之后,再次还原表结构(不出意外应该成功,如果继续报错,则具体情况具体分析)
 

4.完成表结构还原之后则进行数据还原。进入data_bak目录下面的default目录(即对应的数据库)

 
如上图所示,该目录下面记录了表对应的数据存储路径。找到需要还原的表对应的数据目录,同样store改成store_bak。
 
如上图所示,该目录里面存储的是对应的数据,如果没有数据,则无法完成数据修复(因为数据已经丢了,记住这个目录,待会拷贝会用到)。找到这个目录,并确认数据还在之后,进入到data目录下的default目录中。如下图
 
此时该目录下面应该已经有表对应的连接目录了,进入到需要恢复数据的目录中
 
此时该目录下面应该有一个叫detached的文件夹,进入里面,将刚刚确认的数据拷贝到该目录下面
 

5.此时前期准备工作已完成,接下来进行数据恢复

进入到数据库中(clickhouse-client -m --send_logs_level=information --password scsv#ck)
如上图,执行数据恢复操作,执行:
ALTER TABLE scp_vehicle_track_shard  ATTACH PARTITION 20201130;
这里的PARTITION 对应的当时建表的规则,示例中的PARTITION 就是日期,如20201130的意思是恢复20201130这一天的数据。
 
 
6.到此,整个数据恢复步骤完成。整个操作中,恢复数据结构,和执行数据恢复操作比较繁琐,需要一个一个对应修改,PARTITION 也需要一个一个的对应执行。这里建议使用脚本操作。
文章来自个人专栏
lrc的专栏
5 文章 | 1 订阅
0条评论
0 / 1000
请输入你的评论
0
0