clickhouse-FREEZE分区操作

2022-06-12  本文已影响0人  越狱的灵感

原理

在对应的分区目录shard下创建一个linux 硬链接,不影响源表的读写,不占用额外的磁盘空间,也正因为如此切记不要修改文件权限,否则会破clickhouse的原始数据。

参考文档:https://clickhouse.tech/docs/en/sql-reference/statements/alter/partition/#alter_attach-partition-from

操作演示

1,冻结表

--冻结表之前建议OPTIMIZE下,合并一些分区,方便文件拷贝
OPTIMIZE TABLE demo_db.demo_table  FINAL
 
--冻结表
echo -n 'alter table demo_db.demo_table freeze' | clickhouse-client -h xxxx --port 29000 -u default --password xxxxx

注意:生产环境一般都是使用多磁盘存储策略,硬链接不是默认的/var/lib/clickhouse/shard/路径,是集群配置的多磁盘存储路径与store文件夹平级的路径,如我这边就是 /data*/clickhouse 路径。


1.png

2,查看表分区磁盘分布

--查看part在磁盘中的分布
SELECT name, table,disk_name, path FROM system.parts WHERE (table = 'demo_table')
2.png

注意:生产环境会有多个路径,都需要拷贝备份,注意记住path路径中的md5值。

3,备份文件到其他的目录(最好将路径也拷贝了,方便记住md5值)

cp -r /data4/clickhouse/shadow/1/store/ed5/ed52238e-30bf-4090-bc95-9207927d186c/20210510_0_1_2/   /data10/ck_backup

4,清空表数据(未破坏表元数据信息)

TRUNCATE TABLE demo_db.demo_table ON CLUSTER demo0100allp_v1

注意:当前操作的前提是没有破坏表的元数据,如果元数据破坏,需要拷贝到clickhouse的指定目录下,我这边是在 /ssd2/clickhouse/metadata。

5,restore表数据

--拷贝到detached目录
cp -r  /data10/ck_backup/* /data1/clickhouse/store/ed5/ed52238e-30bf-4090-bc95-9207927d186c/detached/
 
--授权
chown clickhouse:clickhouse -R /data1/clickhouse/store/ed5/ed52238e-30bf-4090-bc95-9207927d186c/detached/*
 
--attach 数据
echo -n "alter table demo_db.demo_table attach PART '20210510_0_1_2'" | clickhouse-client -h xxxx  --port 29000 -u default --password xxxx

注意:PART 和 PARTITION的区别。拷贝备份的数据到store路径下,切记md5路径要和之前的一样,但是磁盘可以随机选一个。查询数据,可以发现数据已经恢复。

6,删除shard目录下的文件。

Tips

alter table xxxx freeze 基本上没啥人会这样玩,而且要操作集群,机器一多就。。。比较麻烦 !!!一般是那种自动化的运维工具,这个功能还是可以用用。

上一篇下一篇

猜你喜欢

热点阅读