一、下載地址
Releases · Altinity/clickhouse-backup · GitHub
二、上傳到服務器解壓安裝
? ? ? ? 自行上傳至服務器,解壓命令:
? ? ? ? tar?xvf clickhouse-backup-linux-amd64.tar.gz
三、創建軟連接
? ? ? ? sudo ln -sv?build/linux/amd64/clickhouse-backup /usr/local/bin/
? ? ? ? sudo ln -sv?build/linux/amd64/clickhouse-backup /usr/bin/
四、驗證
? ? ? ? ?clickhouse-backup -v
五、創建配置文件
? ? ? ? 查看clickhouse的數據存儲路徑
? ? ? ? sudo vi /etc/clickhouse-server/config.xml
? ? ? ? 找到path標簽,記錄這個地址“/icc/tools/clickhouse/data”
? ? ? ? 創建clickhouse-backup的配置文件
? ? ? ? sudo mkdir -p /etc/clickhouse-backup
? ? ? ? sudo vi /etc/clickhouse-backup/config.xml
general:remote_storage: nonebackups_to_keep_local: 7 # 本地備份保留個數,默認0表示不自動做備份清理backups_to_keep_remote: 31 # 遠程備份保留個數
clickhouse:username: defaultpassword: ""host: localhostport: 9000 # 這個與jdbc鏈接里的端口沒關系,就是9000data_path: "/icc/tools/clickhouse/data" #clickhouse的數據的實際存儲位置
? ? ? ? 注:
? ? ? ? 1、password配置項,我之前是設置了default的密碼的,然后就在這里使用了那個密碼,但是一直報錯,所以就把default賬號的密碼文件刪掉了?
? ? ? ? 2、data_path配置項,這里就是clickhouse的數據存儲路徑
?六、常用命令
? ? ? ? sudo clickhouse-backup tables? ? ? ? ? ????????//查看可備份的表有哪些
? ? ? ? sudo clickhouse-backup list? ? ? ? ? ? ? ? ???????//查看備份清單
? ? ? ? sudo clickhouse-backup create -t 表名 備份名? ? ? ? //備份指定表
? ? ? ? sudo clickhouse-backup create 備份名? ? ? ? //備份全庫
? ? ? ? sudo clickhouse-backup delete local 備份名? ? ? ? //刪除本地備份
? ? ? ? sudo clickhouse-backup restore 備份名? ? ? ? //還原本地備份
? ? ? ? 還原備份有可選參數:-table 只還原指定表 例:-table=數據庫名.*(還原指定庫)
? ? ? ? 還原時如果遇到類似問題:code: 57, message: Directory for table data store/e8c/e8c3a343-758d-4e9a-a8c3-a343758dce9a/ already exists after 1 times,需要找到備份文件夾中的/metadata/數據庫名/表名.json文件,然后把UUID刪掉(下圖選中部分),再重新執行即可
七、配置定時備份腳本
? ? ? ? 編寫腳本
? ? ? ? vi ck_backup.sh
#!/bin/bash
clickhouse-backup create all_`date +%Y%m%d`
clickhouse-backup delete local all_`date -d "2 day ago" "+%Y%m%d"`
? ? ? ? 編輯定時任務
? ? ? ? crontab -e
0 1 * * * sudo sh /icc/tools/crontab/ck_backup.sh &>>/icc/logs/ck_backup.log
? ? ? ? 如果sudo不成功的,可以添加如下配置
? ? ? ? sudo vi /etc/sudoers
? ? ? ? 在末尾加上這一行
????????user01? ? ? ?ALL=(ALL) ? ? ? NOPASSWD:ALL
????????把user01替換成你的用戶名即可