日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Clickhouse备份恢复方式概览

發(fā)布時間:2023/12/14 编程问答 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Clickhouse备份恢复方式概览 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

文章目錄

  • 一、冷備
  • 二、熱備
    • 2.1 數據導入導出
    • 2.2 快照表
    • 2.3 FREEZE備份
    • 2.4 FETCH備份
  • 三、數據恢復

常見備份方式概覽

備份方式特點
物理文件備份對物理文件進行拷貝,備份期間禁止數據寫入
dump數據導入導出備份方式靈活,但備份速度慢
快照表備份制作_bak表進行備份
FREEZE備份表(分區(qū)表、非分區(qū)表)分區(qū)備份,可通過attach進行裝載恢復
FETCH備份ReplicaMergeTree引擎的分區(qū)表分區(qū)備份,可通過attach進行裝載恢復
元數據備份建表、建庫語句備份

常見恢復方式概覽

恢復方式特點
attach通過對表分區(qū)的備份文件進行裝載恢復,需要將備份文件放在對應的detached目錄下

一、冷備

通過對物理文件的拷貝也可達到備份的效果,但是需要注意的是通過拷貝物理文件進行備份期間,要避免數據寫入。

物理文件的備份主要分為兩部分:

  • 表數據文件備份,${datadir}/data下可對某個數據庫、某張表、某個分區(qū)文件進行備份
  • 元數據備份,${datadir}/metadata下可對某個數據庫、某張表的建表語句進行備份

二、熱備

2.1 數據導入導出

通過查詢語句將指定數據導出到tsv文件進行備份,備份數據比較靈活,并且可通過客戶端工具進行數據導入恢復。

1、基本語法

-- 導出 clickhouse-client -h ${host} -p ${port} --user=${username} --password=${password} --query="select * from ${table_name}" > ${table_name}.tsv-- 導入 cat ${table_name}.tsv | clickhouse-client -h ${host} -p ${port} --user=${username} --password=${password} --query "insert into ${table_name} format TSV";-- 流式導入導出 clickhouse-client -h ${host} -p ${port} --user=${username} --password=${password} --query="select * from <db>.<table_name> FORMAT CSV" | clickhouse-client -h ${host} -p ${port} --user=${username} --password=${password} --query="INSERT INTO <db>.<table_name> FORMAT CSV"

2、示例

1)導出數據到本地文件

# clickhouse-client -h 172.16.104.11 --query="select * from db1.t7_all" > t7_all.tsv# cat t7_all.tsv 1 aa 3 cc 4 dd 5 ee 2 bb

2)導入備份文件進行恢復

-- 創(chuàng)建表 mdw :) create table t7_bak_local on cluster shard2_repl0 (`id` Int32,`name` String) engine=ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/t7_bak_local','{replica}') order by id; mdw :) create table t7_bak_all on cluster shard2_repl0 (`id` Int32,`name` String) engine=Distributed(shard2_repl0,db1,t7_bak_local,rand());-- 導入數據 # cat t7_all.csv | clickhouse-client -h 172.16.104.11 --query "insert into t7_bak_all format TSV";-- 驗證數據 mdw :) select * from t7_bak_all order by id;SELECT * FROM t7_bak_all ORDER BY id ASC┌─id─┬─name─┐ │ 1 │ aa │ │ 2 │ bb │ │ 3 │ cc │ │ 4 │ dd │ │ 5 │ ee │ └────┴──────┘5 rows in set. Elapsed: 0.019 sec.

2.2 快照表

快照表其實就是創(chuàng)建一個與需要進行備份的表表結構相同的一個bak表,并將數據寫入bak表進行備份。

1、基本語法

-- 創(chuàng)建備份表,對于分布式表或者復制表可通過手動指定engine進行區(qū)分 create table ${table_name}_bak as ${table_name} ; create table ${table_name}_bak as ${table_name} engine=xxx order by xx;-- 備份數據 insert into ${table_name}_bak select * from ${table_name} ;

2、示例

1)創(chuàng)建快照表

-- 創(chuàng)建快照表 mdw :) create table db1.t2 on cluster shard2_repl0 as db1.t7_all ENGINE = Distributed('shard2_repl0', 'db1', 't2_local', rand()); mdw :) create table db1.t2_local on cluster shard2_repl0 as db1.t7_local ENGINE = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/t2_local','{replica}') order by id;

2)備份數據

-- 導入數據 mdw :) insert into t2 select * from t7_all ; mdw :) select * from t2 order by id;SELECT * FROM t2 ORDER BY id ASC┌─id─┬─name─┐ │ 1 │ aa │ │ 2 │ bb │ │ 3 │ cc │ │ 4 │ dd │ │ 5 │ ee │ └────┴──────┘5 rows in set. Elapsed: 0.014 sec.

2.3 FREEZE備份

Freeze是基于分區(qū)來進行備份的,通過freeze對指定分區(qū)進行備份后,CK會將改分區(qū)的數據存儲在${datadir}/shadow目錄下,shadow目錄下的N是一個自增長的整數,表示freeze執(zhí)行的次數。

freeze的備份本質上是通過對原始目錄文件進行硬鏈接實現的,所以不會導致額外的空間存儲上漲。

1、基本語法

對于非分區(qū)表,ck其實將其認為是僅有一個all的分區(qū)表來看,使用freeze時不添加parttion條件即可。

alter table ${table_name} freeze [partition ${partition_expr}];

2、示例

1)分區(qū)表

-- 備份數據 sdw1 :) alter table t7 freeze partition 202101; sdw1 :) alter table t7 freeze partition 202102;-- 查看shadow目錄 [root@sdw1 shadow]# pwd /data/clickhouse-server/data/shadow [root@sdw1 shadow]# ll 總用量 4 drwxr-x--- 3 clickhouse clickhouse 18 2月 18 22:16 1 drwxr-x--- 3 clickhouse clickhouse 18 2月 18 22:24 2 -rw-r----- 1 clickhouse clickhouse 2 2月 18 22:24 increment.txt-- 查看備份數據 [root@sdw1 t7]# pwd /data/clickhouse-server/data/shadow/1/data/db1/t7 [root@sdw1 t7]# ll 總用量 0 drwxr-x--- 2 clickhouse clickhouse 279 2月 18 22:16 202101_5_5_0 [root@sdw1 t7]# pwd /data/clickhouse-server/data/shadow/2/data/db1/t7 [root@sdw1 t7]# ll 總用量 0 drwxr-x--- 2 clickhouse clickhouse 279 2月 18 22:24 202102_4_4_0 # 對于分區(qū)表,每個分區(qū)為一個分區(qū)目錄

2)非分區(qū)表

-- 備份數據 sdw3 :) alter table tt1 freeze;-- 查看備份數據 [root@sdw3 tt1]# pwd /data/clickhouse-server/data/shadow/1/data/db1/tt1 [root@sdw3 tt1]# ll 總用量 0 drwxr-x--- 2 clickhouse clickhouse 181 2月 24 16:55 all_1_1_0 # 對于非分區(qū)表,默認為all一個分區(qū)

2.4 FETCH備份

fetch僅僅針對 ReplicaMergeTree 引擎的表。其工作原理與 ReplicatedMergeTree同步數據的原理類似, FETCH 通過指定的 zk_path 找到對應所有的數據文件并進行下載,將備份文件存儲在datadir/data/{datadir}/data/datadir/data/{db}/${table_name}/detached 目錄下。

1、基本語法

alter table ${table_name} fetch partition ${partition_expr} from '${zk_path}'

2、示例

-- 數據準備 sdw1 :) create table t8 on cluster shard1_repl1(`id` Int32,`name` String,`create_date` Date) engine = ReplicatedMergeTree('/clickhouse/tables/{layer}-{shard}/t8','{replica}') PARTITION BY toYYYYMM(create_date) order by idsdw1 :) insert into t8 values (6,'dsk','2020-07-20'),(4,'ww','2020-01-02'),(19,'bw','2021-02-18'),(17,'bb','2021-01-02'),(12,'aw','2021-01-02'),(21,'cc','2020-01-08'),(32,'ww','2020-02-02');-- 備份數據 sdw1 :) alter table t8 fetch partition 202101 from '/clickhouse/tables/01-01/t8'; # from后的路徑為zk_path的路徑,可查看表結構-- 備份數據 [root@sdw1 202101_0_0_0]# pwd /data/clickhouse-server/data/data/db1/t8/detached/202101_0_0_0 [root@sdw1 202101_0_0_0]# ls checksums.txt columns.txt count.txt create_date.bin create_date.mrk2 default_compression_codec.txt id.bin id.mrk2 minmax_create_date.idx name.bin name.mrk2 partition.dat primary.idx

三、數據恢復

物理文件的備份、freeze備份、fetch備份均可以通過attach進行裝載,完成數據恢復,需要注意的是:

  • 物理文件備份、freeze備份、fetch備份時,需要關注對元數據進行備份,避免元數據丟失,數據文件無法進行恢復
  • 使用fetch備份表分區(qū)文件后,備份文件存儲在 datadir/data/{datadir}/data/datadir/data/{db}/${table_name}/detached 目錄下,可直接通過attach命令進行裝載
  • 使用freeze備份表分區(qū)文件后,備份文件存儲在${datadir}/shadow目錄下,若需要進行數據恢復,需要將該目錄下的備份文件拷貝到對應的detached目錄下,然后進行裝載恢復
  • 使用物理文件備份需要將需要恢復的文件拷貝到對應的detached目錄下,然后進行裝載恢復

1、基本語法

對于備份分區(qū)的還原操作,則需要借助 ATTACH 裝載分區(qū)的方式來實現 。

1)對于分區(qū)表

如果要還原分區(qū)表的分區(qū)數據,首先需要主動將shadow子目錄下的分區(qū)文件復制到相應數據表的 detached 目錄下,然后再使用 ATTACH 語句裝載 。

-- 對于分區(qū)表,需要提前創(chuàng)建表結構 ALTER TABLE ${tablename} ATTACH PARTITION ${partition_expr};

2)對于非分區(qū)表

如果要還原分區(qū)表的分區(qū)數據,需要主動將all相關的分區(qū)目錄備份放在對應的表數據目錄下,使用 DETACH 語句卸載、ATTACH 語句裝載 。

-- 對于非分區(qū)表,需要提前創(chuàng)建表結構 ATTACH TABLE ${tablename} DETACH TABLE ${tablename}

2、示例

alter table t8 attach partition 202102;

總結

以上是生活随笔為你收集整理的Clickhouse备份恢复方式概览的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。