官網:https://clickhouse.tech/docs/en/operations/backup/
1 手動實現備份及恢復
ClickHouse 允許使用 ALTER TABLE ... FREEZE PARTITION ... 查詢以創建表分區的本地副本。這是利用硬鏈接(hardlink)到 /var/lib/clickhouse/shadow/ 文件夾中實現的,所以它通常不會
因為舊數據而占用額外的磁盤空間。 創建的文件副本不由 ClickHouse 服務器處理,所以不需要任何額外的外部系統就有一個簡單的備份。防止硬件問題,最好將它們遠程復制到另一個位置,然后刪除本地副本。
1.1 創建備份路徑
(1)創建用於存放備份數據的目錄 shadow
sudo mkdir -p /var/lib/clickhouse/shadow/
如果目錄存在,先清空目錄下的數據
1.2 執行備份命令
echo -n 'alter table t_order_mt freeze' | clickhouse-client
1.3 將備份數據保存到其他路徑
#創建備份存儲路徑
sudo mkdir -p /var/lib/clickhouse/backup/
#拷貝數據到備份路徑
sudo cp -r /var/lib/clickhouse/shadow/
/var/lib/clickhouse/backup/my-backup-name
#為下次備份准備,刪除 shadow 下的數據
sudo rm -rf /var/lib/clickhouse/shadow/*
1.4 恢復數據
(1)模擬刪除備份過的表
echo ' drop table t_order_mt ' | clickhouse-client
(2)重新創建表
cat events.sql | clickhouse-client
(3)將備份復制到 detached 目錄
sudo cp -rl
backup/my-backup-name/1/store/cb1/cb176503-cd88-4ea8-8b17-6503cd888ea8/*
data/default/t_order_mt/detached/
ClickHouse 使用文件系統硬鏈接來實現即時備份,而不會導致 ClickHouse 服務停機(或鎖定)。這些硬鏈接可以進一步用於有效的備份存儲。在支持硬鏈接的文件系統(例如本地
文件系統或 NFS)上,將 cp 與-l 標志一起使用(或將 rsync 與–hard-links 和–numeric-ids 標志一起使用)以避免復制數據。
注意:僅拷貝分區目錄,注意目錄所屬的用戶要是 clickhouse
(4)執行 attach
echo 'alter table t_order_mt attach partition 20200601' | clickhouse-client
(5)查看數據
echo 'select count() from t_order_mt' | clickhouse-client
2 使用 clickhouse-backup
上面的過程,我們可以使用 Clickhouse 的備份工具 clickhouse-backup 幫我們自動化實現。
工具地址:https://github.com/AlexAkulov/clickhouse-backup/
2.1 上傳並安裝
將 clickhouse-backup-1.0.0-1.x86_64.rpm 上傳至/opt/software/目錄下,安裝:
[atguigu@hadoop1 software]$ sudo rpm -ivh
clickhouse-backup-1.0.0-1.x86_64.rpm
2.2 配置文件
[atguigu@hadoop1 ~]$ cat /etc/clickhouse-backup/config.yml
2.3 創建備份
(1)查看可用命令
[atguigu@hadoop1 ~]$ clickhouse-backup help
(2)顯示要備份的表
[atguigu@hadoop1 ~]$ clickhouse-backup tables
(3)創建備份
[atguigu@hadoop1 ~]$ sudo clickhouse-backup create
(4)查看現有的本地備份
[atguigu@hadoop1 ~]$ sudo clickhouse-backup list
備份存儲在中/var/lib/clickhouse/backup/BACKUPNAME。備份名稱默認為時間戳,但是可以選擇使用–name 標志指定備份名稱。備份包含兩個目錄:一個“metadata”目錄,其中包
含重新創建架構所需的 DDL SQL 語句;以及一個“shadow”目錄,其中包含作為 ALTER TABLE ...FREEZE 操作結果的數據。
2.4 從備份恢復數據
(1)模擬刪除備份過的表
echo 'drop table t_order_rmt' | clickhouse-client
(2)從備份還原
sudo clickhouse-backup restore 2021-07-25T23-14-50
--schema 參數:只還原表結構。
--data 參數:只還原數據。
--table 參數:備份(或還原)特定表。也可以使用一個正則表達式,例如,針對特定的數據庫:--table=dbname.*。
2.5 其他說明
(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 均表示不刪除
