sql backup database备份d盘_ClickHouse 备份与恢复
本文轉(zhuǎn)載自 萬(wàn)能修實(shí)驗(yàn)室 作者:公先生 ID: dropudatabase
我們?cè)u(píng)估一款數(shù)據(jù)庫(kù)產(chǎn)品,除了穩(wěn)定性和易用性外,數(shù)據(jù)安全也十分重要,備份與恢復(fù)往往是最后一道安全門。
但如果備份策略不完善、恢復(fù)手段無(wú)效,一旦發(fā)生數(shù)據(jù)誤刪除就真的搶救無(wú)效-撲街了。
目前Clickhouse的備份方式有以下幾種:
文本文件導(dǎo)入導(dǎo)出
表快照
ALTER TABLE…FREEZE
備份工具Clickhouse-Backup
Clickhouse-Copier
下面就逐個(gè)試試吧。
# 數(shù)據(jù)備份 概述
https://clickhouse.tech/docs/en/operations/backup/
1. 文本文件導(dǎo)入導(dǎo)出
# 測(cè)試數(shù)據(jù)
MySQL中源數(shù)據(jù)6.70G,表數(shù)據(jù)量899萬(wàn)
--測(cè)試表數(shù)據(jù)量899萬(wàn)--MySQL中源數(shù)據(jù)6.70G0?rows?in?set.?Elapsed:?71.482?sec.?Processed?8.99?million?rows,?6.70?GB?(125.77?thousand?rows/s.,?93.71?MB/s.)# 導(dǎo)出
clickhouse-client?--query="select?*?from?caihao.ch_test_customer"?>?/data/clickhouse/tmp/caihao.ch_test_customer.tsv# 導(dǎo)入 (注意FORMAT后面大寫) 多個(gè)文件可以用 ch_test*
cat?/data/clickhouse/tmp/caihao.ch_test_customer.tsv?|?clickhouse-client?--query="insert?into?caihao.ch_test_customer?FORMAT?TSV"速度:導(dǎo)入需要20多秒
# CH文件磁盤占用 368MB
368?????ch_test_customer# 備份文件3.5G 壓縮后139MB
[root@clickhouse-01?tmp]#?du?-hsm?*3539????caihao.ch_test_customer.tsv[root@clickhouse-01?tmp]#?gzip?caihao.ch_test_customer.tsv[root@clickhouse-01?tmp]#?du?-hsm?*139?????caihao.ch_test_customer.tsv.gz# 對(duì)比下占用空間:
MySQL -- 6.7G
ClickHouse -- 368M
導(dǎo)出文本 -- 3.5G
壓縮后 -- 139M
2. CTAS表快照
# 1 本地復(fù)制表
clickhouse-01?:)?create?table?ch1??as?ch_test_customer?;CREATE?TABLE?ch1?AS?ch_test_customerOk.0?rows?in?set.?Elapsed:?0.006?sec.?clickhouse-01?:)?insert?into?table?ch1?select?*?from?ch_test_customer?;INSERT?INTO?ch1?SELECT?*FROM?ch_test_customerOk.0?rows?in?set.?Elapsed:?18.863?sec.?Processed?8.99?million?rows,?6.70?GB?(476.59?thousand?rows/s.,?355.13?MB/s.)# 2 遠(yuǎn)程復(fù)制表
https://clickhouse.tech/docs/en/sql-reference/table-functions/remote/
-#?語(yǔ)法remote('addresses_expr',?db,?table[,?'user'[,?'password']])remote('addresses_expr',?db.table[,?'user'[,?'password']])-#?例子:dba-docker?:)?insert?into?table?ch1?select?*?from?remote?('10.222.2.222','caihao.ch_test_customer','ch_app','qwerty_123');INSERT?INTO?ch1?SELECT?*FROM?remote('10.222.2.222',?'caihao.ch_test_customer',?'ch_app',?'qwerty_123')Ok.0?rows?in?set.?Elapsed:?17.914?sec.?Processed?8.99?million?rows,?6.70?GB?(501.85?thousand?rows/s.,?373.95?MB/s.)3. ALTER TABLE…FREEZE
語(yǔ)法:
ALTER?TABLE?table_name?FREEZE?[PARTITION?partition_expr]該操作為指定分區(qū)創(chuàng)建一個(gè)本地備份。
如果 PARTITION 語(yǔ)句省略,該操作會(huì)一次性為所有分區(qū)創(chuàng)建備份。整個(gè)備份過(guò)程不需要停止服務(wù)
注意:FREEZE PARTITION 只復(fù)制數(shù)據(jù), 不備份元數(shù)據(jù). 元數(shù)據(jù)默認(rèn)在文件 /var/lib/clickhouse/metadata/database/table.sql
1. 備份的步驟:
# 確認(rèn)shadow目錄為空:
(默認(rèn)位置:/var/lib/clickhouse/shadow/)
# OPTIMIZE TABLE 把臨時(shí)分區(qū)的數(shù)據(jù),合并到已有分區(qū)中
OPTIMIZE?TABLE?caihao.test_restore_tab?PARTITION?'2020-10'?FINAL;或者
OPTIMIZE?TABLE?caihao.test_restore_tab?FINAL;# 讓ClickHouse凍結(jié)表:
echo?-n?'alter?table?caihao.ch_test_customer?freeze'?|?clickhouse-client# 備份后的文件
[root@clickhouse-01?shadow]#?ll?/data/clickhouse/data/shadow/total?8drwxr-x---?3?clickhouse?clickhouse?4096?Oct?16?15:34?1-rw-r-----?1?clickhouse?clickhouse????2?Oct?16?15:34?increment.txt[root@clickhouse-01?shadow]#?du?-hsm?*309?????11???????increment.txt# 按日期保存?zhèn)浞?#xff1a;
mkdir?-p?/data/clickhouse/data/backup/20201016/cp?-r?/data/clickhouse/data/shadow/?/data/clickhouse/data/backup/20201016/# 最后,為下次備份清理shadow目錄:
rm?-rf?/data/clickhouse/data/shadow/*2. 手動(dòng)恢復(fù)
從備份中恢復(fù)數(shù)據(jù),按如下步驟操作:
如果表不存在,先創(chuàng)建。查看.sql 文件獲取執(zhí)行語(yǔ)句 (將ATTACH 替換成 CREATE).
從 備份的data/database/table/目錄中,將數(shù)據(jù)復(fù)制到 /var/lib/clickhouse/data/database/table/detached/目錄
運(yùn)行 ALTER TABLE t ATTACH PARTITION操作,將數(shù)據(jù)添加到表中
測(cè)試把數(shù)據(jù)恢復(fù)到一個(gè)新表test_restore_tab中
# 1 獲取建表語(yǔ)句:
cat?/data/clickhouse/data/metadata/caihao/ch_test_customer.sql然后將DDL語(yǔ)句中的 ATTACH TABLE 改為 CREATE TABLE
# 2 備份復(fù)制到表的“ detached”目錄中:
cp?-rl?/data/clickhouse/data/backup/20201016/shadow/1/data/caihao/ch_test_customer/*?/data/clickhouse/data/data/caihao/test_restore_tab/detached/chown?clickhouse:clickhouse?-R?/data/clickhouse/data/data/caihao/test_restore_tab/detached/*# 3 將數(shù)據(jù)添加到表中 attach partition
echo?'alter?table?caihao.test_restore_tab?attach?partition?202010?'?|?clickhouse-clientecho?'alter?table?caihao.test_restore_tab?attach?partition?202009?'?|?clickhouse-client要把所有分區(qū)都執(zhí)行一遍,最終detached 目錄下所有的分區(qū),都移動(dòng)到了上一目錄
# 4 確認(rèn)數(shù)據(jù)已還原:
echo?'select?count()?from?caihao.test_restore_tab?attach'?|?clickhouse-clientclickhouse-01?:)??select?count(*)?from?test_restore_tab;SELECT?count(*)FROM?test_restore_tab┌─count()─┐│?8990020?│└─────────┘1?rows?in?set.?Elapsed:?0.002?sec.?clickhouse-01?:)??select?count(*)?from?ch_test_customer;SELECT?count(*)FROM?ch_test_customer┌─count()─┐│?8990020?│└─────────┘1?rows?in?set.?Elapsed:?0.002?sec.數(shù)據(jù)量和原表一致
4. Clickhouse-Backup
# Clickhouse-Backup簡(jiǎn)介
https://github.com/AlexAkulov/clickhouse-backup
# 使用限制:
支持1.1.54390以上的ClickHouse
僅MergeTree系列表引擎
不支持備份Tiered storage或storage_policy
云存儲(chǔ)上的最大備份大小為5TB
AWS S3上的parts數(shù)最大為10,000
--安裝方式1:二進(jìn)制文件安裝
# clickhouse-backup下載:
wget?https://github.com/AlexAkulov/clickhouse-backup/releases/download/v0.6.0/clickhouse-backup.tar.gz# 解壓即用
tar?-xf?clickhouse-backup.tar.gz?cd?clickhouse-backup?/?sudo?cp?clickhouse-backup??/usr/local/bin--安裝方式2:rpm安裝:
wget?https://github.com/AlexAkulov/clickhouse-backup/releases/download/v0.6.0/clickhouse-backup-0.6.0-1.x86_64.rpmrpm?-ivh?clickhouse-backup-0.6.0-1.x86_64.rpm# 查看版本
[root@clickhouse-01?clickhouse-backup]#?clickhouse-backup?-vVersion:?????????0.6.0Git?Commit:??????7d7df1e36575f0d94d330c7bfe00aef7a2100276Build?Date:??????2020-10-02# 編輯配置文件:
mkdir?-p?/etc/clickhouse-backup/vi?/etc/clickhouse-backup/config.yml添加一些基本的配置信息
general:??remote_storage:?none??backups_to_keep_local:?7??backups_to_keep_remote:?31clickhouse:??username:?default??password:?""??host:?localhost??port:?9000??data_path:?"/data/clickhouse/data"# 查看全部默認(rèn)的配置項(xiàng)
clickhouse-backup?default-config# 查看可備份的表
clickhouse-backup?tables# 創(chuàng)建備份
1. 全庫(kù)備份
clickhouse-backup?create備份存儲(chǔ)在中 $data_path/backup 下,備份名稱默認(rèn)為時(shí)間戳,可手動(dòng)指定備份名稱。例如:
clickhouse-backup?create?ch_bk_20201020備份包含兩個(gè)目錄:
'metadata'目錄: 包含重新創(chuàng)建所需的DDL SQL
'shadow'目錄: 包含作為ALTER TABLE ... FREEZE操作結(jié)果的數(shù)據(jù)。
2. 單表備份
語(yǔ)法:
clickhouse-backup?create?[-t,?--tables=.]?備份表caihao.ch_test_customer
clickhouse-backup?create??-t?caihao.ch_test_customer?ch_test_customer3. 備份多個(gè)表
clickhouse-backup?create??-t?caihao.test_restore_tab,caihao.ch1?ch_bak_2tab# 查看備份文件
[root@clickhouse-01?backup]#?clickhouse-backup?listLocal?backups:-?'test20201019'????????(created?at?20-10-2020?14:18:40)-?'ch_bk_20201020'??????(created?at?20-10-2020?14:20:35)-?'2020-10-20T06-27-08'?(created?at?20-10-2020?14:27:08)-?'ch_test_customer'????(created?at?20-10-2020?15:17:13)-?'ch_bak_2tab'?(created?at?20-10-2020?15:33:41)# 刪除備份文件
[root@clickhouse-01?backup]#?clickhouse-backup?delete?local?test20201019[root@clickhouse-01?backup]#?[root@clickhouse-01?backup]#?clickhouse-backup?listLocal?backups:-?'ch_bk_20201020'??????(created?at?20-10-2020?14:20:35)-?'2020-10-20T06-27-08'?(created?at?20-10-2020?14:27:08)-?'ch_test_customer'????(created?at?20-10-2020?15:17:13)-?'ch_bak_2tab'?(created?at?20-10-2020?15:33:41)# 清除shadow下的臨時(shí)備份文件
[root@clickhouse-01?shadow]#??clickhouse-backup??clean2020/10/20?14:19:13?Clean?/data/clickhouse/data/shadow# 數(shù)據(jù)恢復(fù)
語(yǔ)法:
clickhouse-backup restore 備份名
[root@clickhouse-01?~]#?clickhouse-backup?restore??-helpNAME:???clickhouse-backup?restore?-?Create?schema?and?restore?data?from?backupUSAGE:???clickhouse-backup?restore?[--schema]?[--data]?[-t,?--tables=.]?OPTIONS:???--config?FILE,?-c?FILE???????????????????Config?FILE?name.?(default:?"/etc/clickhouse-backup/config.yml")?[$CLICKHOUSE_BACKUP_CONFIG]???--table?value,?--tables?value,?-t?value?????--schema,?-s?????????????????????????????Restore?schema?only???--data,?-d???????????????????????????????Restore?data?only一些參數(shù):
--table 只恢復(fù)特定表,可使用正則。
如針對(duì)特定的數(shù)據(jù)庫(kù):--table=dbname.*
--schema 只還原表結(jié)構(gòu)
--data 只還原數(shù)據(jù)
# 備份到遠(yuǎn)程目標(biāo)
Clickhouse-backup 支持從遠(yuǎn)程對(duì)象存儲(chǔ)(例如S3,GCS或IBM的COS)上載和下載備份。
例如 AWS 的 S3, 修改配置文件/etc/clickhouse-backup/config.yml
s3:??access_key:?????secret_key:?????bucket:?????region:?us-east-1??path:?"/some/path/in/bucket"??然后即可以上傳備份:
$?clickhouse-backup?upload?2020-07-06T20-13-022020/07/07?15:22:32?Upload?backup?'2020-07-06T20-13-02'2020/07/07?15:22:49???Done.或者下載備份:
$?sudo?clickhouse-backup?download?2020-07-06T20-13-022020/07/07?15:27:16???Done.# 備份保留策略
general:下的2個(gè)參數(shù)來(lái)控制備份的保留策略
backups_to_keep_local: 0 # 本地備份保留個(gè)數(shù)
backups_to_keep_remote: 0 # 遠(yuǎn)程備份保留個(gè)數(shù)
默認(rèn)為0,即不自動(dòng)做備份清理。
可以設(shè)置為:
backups_to_keep_local: 7
backups_to_keep_remote: 31
使用clickhouse-backup upload 上傳備份可以使用參數(shù) --diff-from
將文件與以前的本地備份進(jìn)行比較,僅上載新的/更改的文件。
必須保留先前的備份,以便從新備份中進(jìn)行還原。
# 備份恢復(fù)測(cè)試:
測(cè)試庫(kù)有3張表,數(shù)據(jù)量一樣
dba-docker?:)?show?tables;SHOW?TABLES┌─name─┐│?ch1??│??#?數(shù)據(jù)量?8990020│?ch2??│??#?數(shù)據(jù)量?8990020│?ch3??│??#?數(shù)據(jù)量?8990020└──────┘做個(gè)備份:bk_3_tab
clickhouse-backup?create?bk_3_tab進(jìn)行數(shù)據(jù)破壞:
truncate?table?ch1;insert?into?ch2?select?*?from?ch3;drop?table?ch3;此時(shí)的數(shù)據(jù)量
dba-docker?:)?show?tables;SHOW?TABLES┌─name─┐│?ch1??│?#?數(shù)據(jù)量?0│?ch2??│?#?數(shù)據(jù)量?8990020*2=17980040└──────┘?#?ch3被drop只使用 --schema 恢復(fù)ch3表的表結(jié)構(gòu)
clickhouse-backup?restore?bk_3_tab?-table?caihao.ch3??--schema只有表結(jié)構(gòu),沒(méi)數(shù)據(jù)
dba-docker?:)?select?count(*)?from?ch3;SELECT?count(*)FROM?ch3┌─count()─┐│???????0?│└─────────┘用 --data 恢復(fù)ch3表中數(shù)據(jù)
(注意,由于是ATTACH PART操作,如果執(zhí)行2次的話,數(shù)據(jù)會(huì)翻倍)
clickhouse-backup?restore?bk_3_tab?-table?caihao.ch3??--data數(shù)據(jù)已導(dǎo)入
dba-docker?:)?select?count(*)?from?ch3;SELECT?count(*)FROM?ch3┌─count()─┐│?8990020?│└─────────┘恢復(fù)其他表:
[root@dba-docker?~]#?clickhouse-backup?restore?bk_3_tab?2020/10/20?17:42:37?Create?table?'caihao.ch1'2020/10/20?17:42:37?can't?create?table?'caihao.ch1':?code:?57,?message:?Table?caihao.ch1?already?exists.由于要新建表,只能把表drop掉才能全庫(kù)恢復(fù)。
直接 drop database,然后全庫(kù)恢復(fù)
clickhouse-backup?restore?bk_3_tab驗(yàn)證后數(shù)據(jù)是全部恢復(fù)成功了
dba-docker?:)?show?tables;SHOW?TABLES┌─name─┐│?ch1??│?│?ch2??│??│?ch3??│└──────┘dba-docker?:)?select?count(*)?from?ch1;SELECT?count(*)FROM?ch1┌─count()─┐│?8990020?│└─────────┘# 加到每日備份任務(wù)中:
mkdir?-p?/data/clickhouse/scriptsvi?/data/clickhouse/scripts/CH_Full_Backup.sh#!/bin/bashBACKUP_NAME=CH_Full_Backup_$(date?+%Y-%m-%dT%H-%M-%S)/usr/bin/clickhouse-backup?create?$BACKUP_NAME#?/usr/bin/clickhouse-backup?upload?$BACKUP_NAME由于需要副本環(huán)境才能使用,Clickhouse-Copier就不做測(cè)試了。
數(shù)據(jù)庫(kù)的“后悔藥”
備份作為數(shù)據(jù)庫(kù)最后的“后悔藥”意義十分重大:
沒(méi)有做備份,小心被刪庫(kù);
一旦刪了庫(kù),就要快跑路;
萬(wàn)一被抓住,十五年起步。
所以,如果做不好備份恢復(fù),就苦練跑路甩鍋,情況不好,拔腿就跑。
總結(jié)
以上是生活随笔為你收集整理的sql backup database备份d盘_ClickHouse 备份与恢复的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android Studio ---
- 下一篇: 社区团购小程序开发