目录
- 0 背景
- 1 准备工作
- 2 实施方案
-
- 方案一:remote查询远程数据,直接插入目标数据库(未使用)
- 方案二:FREEZE+ATTACH(实际使用)
-
- 备份源数据
- 将源数据传输到目标服务器
- 目标数据库加载数据
0 背景
clickhouse所在A服务器分区的可用空间不足,而服务器B的磁盘空间较充足。 综合考虑后,决定本次数据迁移目标为:在不动clickhouse相关服务的情况下,对历史数据进行跨服务器备份,然后在需要时,删除服务器A中的clickhouse原始数据。
1 准备工作
在服务器B的最大分区中,安装相同版本和配置的clickhouse。 安装过程可参考:clickhouse-安装部署 复制服务器A中clickhouse的表结构,在服务器B的clickhouse中创建对应库表。
2 实施方案
方案一:remote查询远程数据,直接插入目标数据库(未使用)
缺点:仅适用于小数据量,查询大量数据直接插入,可能出现数据不一致问题 步骤: 1.在目标数据库执行插入:insert into select * from remote()
方案二:FREEZE+ATTACH(实际使用)
备份源数据
1.在源数据库执行备份语句
ALTER TABLE database.table FREEZE PARTITION '20210101';
ALTER TABLE database.table FREEZE PARTITION '20210102';
执行后会在config.xml中设置的文件目录/shadow/目录下生成备份文件。 生成的备份文件目录结构为:数字/database/table/xxx… 其中, 数字为自增数字,与FREEZE语句的分区顺序对应。(例如,执行上述2条备份语句后,会生成1和2两个文件夹) xxx…部分为实际的数据目录。 注意: (1)FREEZE备份方式,采用硬链接方式,不会额外占用磁盘空间。 (2)同时备份多个分区时,dbeaver默认不支持同时执行多个语句,可以在源服务器中使用clickhouse-client命令执行,包含多个sql语句的sql文件。 参考命令:
clickhouse-client –port 实际端口号 –user 数据库账户–password 数据库密码 -d 数据库名 –multiquery < ./linshi.sql
将源数据传输到目标服务器
将实际的数据目录xxx…,传输到目标服务器的特定目录下。
1.将每个分区对应的xxx…目录,mv到上层shadow/目录下,方便后续加载恢复数据。 为实现批量移动目录,参考脚本如下:
#!/bin/bash
# 提示用户输入结束数字
read -p "请输入结束数字: " end_num
# 循环从起始数字到结束数字
for i in $(seq 1 $end_num)
do
# $i代表当前循环的数字
nohup mv /data/clickhouse/data/clickhouse/shadow/$i/data/database/table/* /data/clickhouse/data/clickhouse/shadow &
done
其中,起始数字默认为1,结束数字为本次备份的分区数量。(例如,备份20210101-20210102分区数据,数字范围为1-2)
2.使用scp命令,将shadow/目录下文件传输到目标服务器的指定目录下 其中,指定目录为:mnt/clickhouse/data/clickhouse/data/database/table/detached 是clickhouse加载备份数据的默认目录。 参考命令:
scp -r /data/clickhouse/data/clickhouse/shadow/* root@ip:/mnt/clickhouse/data/clickhouse/data/database/table/detached
目标数据库加载数据
1.在detached目录下,修改传输过来的源数据权限
chown -R clickhouse:clickhouse ./
2.批量加载数据 使用clickhouse-client命令,批量执行ATTACH语句,将传输过来的数据,加载进目标数据库。
ALTER TABLE database.table ATTACH PARTITION '20210101';
ALTER TABLE database.table ATTACH PARTITION '20210102';
参考命令:
clickhouse-client –port 实际端口号 –user 数据库账户–password 数据库密码 -d 数据库名 –multiquery < ./linshi.sql
注意:以上涉及的目录,以实际路径为准。
评论前必须登录!
注册