阿里云clickhouse实例跨账号数据迁移
精选
原创
©著作权归作者所有:来自51CTO博客作者a317418365的原创作品,请联系作者获取转载授权,否则将追究法律责任
前提:
两台不同阿里云账号里的云数据库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源库,选择需要导出的数据库,右键导出建表语句。
再登录到目标库的DMS,创建database,再导入建表语句执行。
步骤五:导入数据到目标实例云数据库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上查看有数据,完成。
遇到的坑
导入数据时会遇到报错说partitions不够,这个不能在阿里云实例中修改,需要登录DMS里修改。
set global max_partitions_per_insert_block = 5000