MySQL迁移到ClickHouse方案
这篇文章主要介绍了mysql迁移到clickhouse的几种方法,本文给大家介绍的非常详细,具有一定的参考借鉴价值,需要的朋友可以参考下。数据迁移需要从mysql导入clickhouse, 总结方案如下,包括clickhouse自身支持的方式及第三方工具迁移方案。
ClickHouse同步建表
1 2 3 4 5 6 7 8 9 | create table engin mysql CREATE TABLE [IF NOT EXISTS] [db.]table_name [ ON CLUSTER cluster] ( name1 [type1] [ DEFAULT |MATERIALIZED|ALIAS expr1] [TTL expr1], name2 [type2] [ DEFAULT |MATERIALIZED|ALIAS expr2] [TTL expr2], ... INDEX index_name1 expr1 TYPE type1(...) GRANULARITY value1, INDEX index_name2 expr2 TYPE type2(...) GRANULARITY value2 ) ENGINE = MySQL( 'host:port' , 'database' , 'table' , 'user' , 'password' [, replace_query, 'on_duplicate_clause' ]); |
官方文档: https://clickhouse.yandex/docs/en/operations/table_engines/mysql/
注意,实际数据存储在远端mysql数据库中,可以理解成外表。
可以通过在mysql增删数据进行验证。
1 2 3 4 5 6 7 8 9 10 | #insert into select方法 insert into select from -- 先建表 CREATE TABLE [IF NOT EXISTS] [db.]table_name [ ON CLUSTER cluster] ( name1 [type1] [ DEFAULT |MATERIALIZED|ALIAS expr1], name2 [type2] [ DEFAULT |MATERIALIZED|ALIAS expr2], ... ) ENGINE = engine -- 导入数据 INSERT INTO [db.] table [(c1, c2, c3)] select 列或者* from mysql( 'host:port' , 'db' , 'table_name' , 'user' , 'password' ) |
可以自定义列类型,列数,使用clickhouse函数对数据进行处理,比如
1 2 3 4 5 6 7 | select toDate(xx) from mysql( "host:port" , "db" , "table_name" , "user_name" , "password" ) create table as select from CREATE TABLE [IF NOT EXISTS] [db.]table_name ENGINE =Log AS SELECT * FROM mysql( 'host:port' , 'db' , 'article_clientuser_sum' , 'user' , 'password' ) |
网友文章: http://jackpgao.github.io/2018/02/04/ClickHouse-Use-MySQL-Data/
Altinity开源工具
不支持自定义列,参考资料里的博主写的 ENGIN=MergeTree
测试失败。
可以理解成 create table
和 insert into select
的组合
Altinity/clickhouse-mysql-data-reader
Altinity公司开源的一个python工具,用来从mysql迁移数据到clickhouse(支持binlog增量更新和全量导入),但是官方readme和代码脱节,根据quick start跑不通。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | ## 创建表 clickhouse-mysql \ --src-host=127.0.0.1 \ --src-user=reader \ --src-password=Qwerty1# \ --table-templates-with-create-database \ --src-table=airline.ontime > create_clickhouse_table_template.sql ## 修改脚本 vim create_clickhouse_table_template.sql ## 导入建表 clickhouse-client -mn < create_clickhouse_table_template.sql ## 数据导入 clickhouse-mysql \ --src-host=127.0.0.1 \ --src-user=reader \ --src-password=Qwerty1# \ --table-migrate \ --dst-host=127.0.0.1 \ --dst-table=logunified \ --csvpool |
官方文档: https://github.com/Altinity/clickhouse-mysql-data-reader#mysql-migration-case-1—migrate-existing-data
注意,上述三种都是从mysql导入clickhouse,如果数据量大,对于mysql压力还是挺大的。下面介绍两种离线方式(streamsets支持实时,也支持离线)