3

阿里云clickhouse实例跨账号数据迁移

 2 years ago
source link: https://blog.51cto.com/voice/5682165
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

阿里云clickhouse实例跨账号数据迁移

精选 原创

两台不同阿里云账号里的云数据库clickhouse实例需要做数据迁移,阿里云现在不支持跨账号的clickhouse数据迁移,所以需要自己用命令行去操作。

需安装clickhouse-client工具,请安装与目标实例云数据库ClickHouse版本一致的clickhouse-client工具,下载链接请参见​ ​https://packages.clickhouse.com/deb/pool/stable/?spm=a2c4g.11186623.0.0.1c2948a2ZRCn4K​​​,如何安装和使用​ ​Installation | ClickHouse Docs​

连接数据库时端口建议选择3306,8123我连接失败。

开始迁移:

步骤一:查看源实例的database列表

clickhouse-client --host="<old host>" --port="<old port>" --user="<old user name>" --password="<old password>" --query="SHOW databases" > database.list

参数解释如下:

old host

源实例的地址。

old port

源实例的端口。

old user name

登录源实例的账号,拥有DML读写和设置权限,允许DDL权限。

old password

上述账号对应的密码。

说明 system是系统数据库,不需要迁移,可以直接过滤掉。

步骤二:查看源实例的table列表

clickhouse-client --host="<old host>" --port="<old port>" --user="<old user name>" --password="<old password>" --query="SHOW tables from <database_name>" > table.list

说明 查询到的表名中,如果有以.inner.开头的表,则它们是物化视图的内部表示,不需要迁移,可以直接过滤掉。

步骤三:导出源实例的建表DDL

clickhouse-client --host="<old host>" --port="<old port>" --user="<old user name>" --password="<old password>" --query="SHOW CREATE TABLE <database_name>.<table_name>" > table.sql

步骤四:将建表DDL导入到目标实例云数据库ClickHouse

clickhouse-client --host="<new host>" --port="<new port>" --user="<new user name>" --password="<new password>" < table.sql

这一步如果失败可以登录阿里云DMS源库,选择需要导出的数据库,右键导出建表语句。

阿里云clickhouse实例跨账号数据迁移_clickhouse

再登录到目标库的DMS,创建database,再导入建表语句执行。

阿里云clickhouse实例跨账号数据迁移_数据迁移_02

步骤五:导入数据到目标实例云数据库ClickHouse

​通过Linux pipe管道进行流式导出导入

clickhouse-client --host="<old host>" --port="<old port>" --user="<user name>" --password="<password>" --query="select * from <database_name>.<table_name> FORMAT CSV" |
clickhouse-client --host="<new host>" --port="<new port>" --user="<user name>" --password="<password>" --query="INSERT INTO <database_name>.<table_name> FORMAT CSV"

批量导入多个表的数据

for i in `cat table.list`;do clickhouse-client --host="<old host>" --port="<old port>" --user="<user name>" --password="<password>" --query="select * from import.$i FORMAT CSV"| clickhouse-client --host="<new host>" --port="<new port>" --user="<user name>" --password="<password>" --query="INSERT INTO import.$i FORMAT CSV" ;done

在dms上查看有数据,完成。


阿里云clickhouse实例跨账号数据迁移_数据迁移_03

导入数据时会遇到报错说partitions不够,这个不能在阿里云实例中修改,需要登录DMS里修改。

set global max_partitions_per_insert_block = 5000

阿里云clickhouse实例跨账号数据迁移_数据迁移_04

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK