使用ClickHouse-Local迁移上云

当您需要优化数据管理、提高数据访问性能和降低数据库维护成本时,您可以将自建数据库迁移至云数据库ClickHouse企业版。云数据库ClickHouse企业版通过ClickHouse-Local工具为您的迁移任务提供了简便且可靠的解决方案。

什么是ClickHouse-Local?

通常ClickHouse以集群的形式运行,ClickHouse数据库引擎的多个实例以分布式方式运行在不同的服务器上。在单个服务器上,ClickHouse数据库引擎作为clickhouse-server程序的一部分运行。数据库访问路径、用户和安全性等通过服务器配置文件进行配置。

而ClickHouse-Local工具支持以命令行方式使用ClickHouse数据库引擎,而无需配置和启动云数据库ClickHouse集群。

image.png

背景信息

如果ClickHouse中提供了您自建数据库系统对应的集成引擎或表函数,或者您自建数据库系统提供了JDBC驱动程序或ODBC驱动程序,您就可以使用ClickHouse-Local作为ETL工具,将数据从当前的数据库系统迁移到云数据库ClickHouse企业版。关于ClickHouse-Local、集成引擎和表函数的详细信息,请参见ClickHouse-Local集成引擎表函数

其中ClickHouse为MySQL、PostgreSQL、MongoDB和SQLite提供了集成引擎和表函数(可以即时创建集成引擎)。对于所有其他流行的数据库系统提供了JDBC驱动程序或ODBC驱动程序。关于MySQL、PostgreSQL、MongoDB和 SQLite的详细信息,请参见MySQLPostgreSQLMongoDBSQLite

image.png

前提条件

  • 将安装了ClickHouse-Local的主机(例如ECS服务器或本地服务器)的IP地址添加到云数据库ClickHouse企业版的IP白名单中。具体操作,请参见设置白名单

  • 云数据库ClickHouse企业版目标表的结构和源表的结构必须保持一致(列名和顺序必须相同,并且列数据类型必须兼容。数据类型映射关系,详情请参考数据类型映射)。

安装ClickHouse-Local

您需要一个托管ClickHouse-Local的主机机器(例如ECS服务器或本地服务器),该主机机器可以访问您当前的源数据库系统和云数据库ClickHouse企业版目标服务。

  1. 下载ClickHouse-Local。

    curl https://clickhouse.com/ | sh
  2. 运行ClickHouse-Local。

    ./clickhouse local

示例1:使用集成引擎从MySQL迁移到云数据库ClickHouse企业版

您可以使用集成表引擎(通过MySQL表函数动态创建)从源MySQL数据库读取数据,并使用remoteSecure表函数将数据写入云数据库ClickHouse企业版集群上的目标表。image.png

  1. 在目标云数据库ClickHouse企业版集群上执行以下操作:

    1. 创建目标库。

      CREATE DATABASE db
    2. 创建目标表,且目标表的结构与MySQL表的结构一致。

      CREATE TABLE db.table ...
  2. 在安装ClickHouse-Local的主机机器上运行ClickHouse-Local。

    ./clickhouse local --query 
    "INSERT INTO FUNCTION
    remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table', 'default', 'PASS')
    SELECT * FROM mysql('host:port', 'database', 'table', 'user', 'password');"
    说明

    在ClickHouse-Local主机机器上不会存储任何数据。数据都是从源MySQL表中读取,然后立即写入云数据库ClickHouse企业版服务上的目标表中。

示例2:使用JDBC从MySQL迁移到云数据库ClickHouse企业版

您可以使用JDBC集成表引擎、ClickHouse JDBC birdge及MySQL JDBC驱动程序,从源MySQL数据库中读取数据,并使用remoteSecure表函数将数据写入云数据库ClickHouse企业版集群的目标表中。JDBC集成表引擎、ClickHouse JDBC bridge和remoteSecure表函数的详细信息,请参见JDBC集成表引擎ClickHouse JDBC birdgeremoteSecure表函数image.png

  1. 在目标云数据库ClickHouse企业版集群上执行以下操作:

    1. 创建目标库。

      CREATE DATABASE db
    2. 创建目标表,且目标表的结构与MySQL表的结构一致。

      CREATE TABLE db.table ...
  2. 在安装ClickHouse-Local的主机机器上安装配置运行ClickHouse JDBC Bridge。具体操作,请参见操作指南

  3. 在安装ClickHouse-Local的主机机器上运行ClickHouse-Local。

    ./clickhouse local --query "
    INSERT INTO FUNCTION
    remoteSecure('HOSTNAME.clickhouse.cloud:9440', 'db.table', 'default', 'PASS')
    SELECT * FROM mysql('host:port', 'database', 'table', 'user', 'password');"
    说明

    在ClickHouse-Local主机机器上不会存储任何数据。数据都是从源MySQL表中读取,然后立即写入云数据库ClickHouse企业版服务上的目标表中。

数据类型映射

RDS MySQL或PolarDB MySQL类型

ClickHouse类型

Unsigned tinyint

UInt8

Tinyint

Int8

Unsigned smallint

UInt16

Smallint

Int16

Unsigned int,Unsigned mediumint

UInt32

Int,Mediumint

Int32

Unsigned bigint

UInt64

Bigint

Int64

Float

Float32

Double

Float64

Date

Date

Datetime,Timestamp

DateTime

Binary

FixedString

其他

String