这里演示的是两个分布式节点,两个集群节点组成的分布式集群。
如果多个节点,就操作多次就行了。
演示类似下图结构:
?
下文中sgdatabase是对应的数据库名字,historysignal是集群表名,historysignal_Distributed是分布式表名。
这里只演示一个数据表,需要多个表或其他的表,请类推。
我这里的节点是:
10.168.1.100:8123
10.168.1.100:8124
10.168.1.101:8123
10.168.1.101:8124
将100的两个节点冷备,之后还原到102中。
打开DBeaver 工具,连接到需要备份的机器上的所有节点。
# 卸载对应的表
detach table [DB].[TABLE]
例如我这里卸载10.168.1.100上面的节点1的sgdatabase.historysignal表。
detach table sgdatabase.historysignal
?
同理卸载同机器的第二个节点。
?
使用WinSCP连接到目标服务器
?
将/home/allspark/clcikhouse/data/sgdatabase下面的historysignal和historysignal_Distributed复制到左边。
?
将/home/allspark/clcikhouse2/data/sgdatabase下面的historysignal和historysignal_Distributed复制到左边。
?
打开ZKUI,一般在本地的9090端口,使用浏览器打开
?
输入默认账号密码 admin/manager
登录后,进去这个页面,先确认有几个如图的分片节点。我们这里有两个。
?
点开需要备份的表
?
打开到如下图:
?
选择需要备份的数据的对应的的IP地址,点击导出:
?
保存到本机电脑,取一个名字。
?
同理导出
?
?
打开DBeaver 工具,连接到之前备份前的节点。
执行
attach table [DB].[TABLE]
例如:
attach table sgdatabase.historysignal
?
其他节点同理执行:
?
使用SSH连接到新的电脑上。
参考《Docker中安装ClickHouse》文档来新建安装ClickHouse
新建数据库
使用DBeaver工具连接到新机器上的两个节点,
我这里是10.168.1.102:8123和10.168.1.102:8124
分别执行以下代码创建数据库
CREATE DATABASE IF NOT EXISTS sgdatabase;
?
?
创建数据表格。
在提供的SQL中找到你需要备份数据的表的表结构SQL。
复制到工具中执行。一个复制表一个分布式表
?
打开WinSCP工具,复制备份的文件到新的机器上。删除右边的,然后复制过去。
?
第二个节点
?
打开之前导出的zookeeper数据,
?
将其中的IP改为目标数据库的IP地址
?
相同操作另外一个节点的数据修改:
?
打开之前的10.168.1.10:9090的zkui
?
?
导入:
?
可以看到导入成功。
?
同理操作
?
?
如果不是新机器还原数据,就不需要做这一步操作。
修改10.168.1.102机器上面
/home/allspark/clickhouse-server/metrika.xml
/home/allspark/clickhouse-server2/metrika.xml
将分片1分片2中的旧机器IP改为新机器的IP地址。
zookeeper 的节点不变。
重启docker上的所有容器
docker restart $(docker ps -a)
修改10.168.1.101机器上面的
/home/allspark/clickhouse-server/metrika.xml
/home/allspark/clickhouse-server2/metrika.xml
将分片1分片2中的旧机器IP改为新机器的IP地址。
zookeeper 的节点不变。
重启docker上的所有容器
DBeaver工具连接到新机器上的两个节点
执行
detach table [DB].[TABLE]
attach table [DB].[TABLE]
# 例如我的
detach table sgdatabase.historysignal
attach table sgdatabase.historysignal
原文:https://www.cnblogs.com/hanfan/p/12867258.html