ClickHouse 自身提供了多种备份数据的方法,根据数据规模的不同,可以选择不同的形式。

导出文件备份


如果数据的体量较小,可以通过 dump 的形式将数据导出为本地文件。例如执行下面的语句将 test_backup 的数据导出:

# 导出数据
clickhouse-client --query="SELECT * FROM test_backup" > /chbase/test_backup.tsv
# 导入数据
cat /chbase/test_backup.tsv | clickhouse-client --query "INSERT INTO test_backup FORMAT TSV"

上述这种 dump 形式的优势在于,可以利用 SELECT 查询并筛选数据,然后按需备份。

如果是备份整个表的数据,也可以直接复制它的整个目录文件,例如:

mkdir -p /chbase/backup/default/ & cp -r /chbase/data/default/test_backup /chbase/backup/default/

通过快照表备份


快照表实质上就是普通的数据表,它通常按照业务规定的备份频率创建,例如按天或者按周创建。

所以首先需要建立一张与原表结构相同的数据表,然后再使用 INSERT INTO SELECT 句式,点对点地将数据从原表写入备份表。

假设数据表 test_backup 需要按日进行备份,现在为它创建当天的备份表:

# 创建 test_backup 的 0206 备份表
CREATE TABLE test_backup_0206 AS test_backup

-- 插入数据完成快照备份
INSERT INTO TABLE test_backup_0206 SELECT * FROM test_backup

如果考虑到容灾问题,也可以将备份表放置在不同的 ClickHouse 节点上,此时需要将上述 SQL 语句改成远程查询的形式: