Skip to content
ClickHouse Docs
ClickHouse DocsClickHouse Docs

使用 clickhouse-local 迁移到 ClickHouse

迁移自管理 ClickHouse

您可以使用 ClickHouse,更准确地说,是使用 clickhouse-local 作为 ETL 工具,将数据从当前的数据库系统迁移到 ClickHouse Cloud,前提是当前数据库系统具备以下之一: ClickHouse 提供的integration 表引擎表函数, 或者由相应厂商提供的 JDBC 驱动或 ODBC 驱动。

我们有时将这种迁移方法称为 "中转" 方法,因为它会借助一个中间中转点,将数据从源数据库迁移到目标端数据库。比如,出于安全要求,私有网络或内部网络中可能只允许出站连接,此时就需要采用这种方法:先用 clickhouse-local 从源数据库拉取数据,再将数据推送到目标端 ClickHouse 数据库,而 clickhouse-local 就充当这个中转点。

ClickHouse 为 MySQLPostgreSQLMongoDBSQLite 提供 integration 表引擎 和 表函数 (可动态创建 integration 表引擎) 。 对于其他所有常见数据库系统,则可以使用由相应厂商提供的 JDBC 驱动或 ODBC 驱动。

什么是 clickhouse-local?

迁移自管理 ClickHouse

通常,ClickHouse 以集群形式运行,即多个 ClickHouse 数据库引擎实例以分布式方式运行在不同的服务器上。

在单台服务器上,ClickHouse 数据库引擎作为 clickhouse-server 程序的一部分运行。数据库访问 (路径、用户、安全等) 通过服务器配置文件进行配置。

clickhouse-local 工具让你能够以隔离的命令行工具形式使用 ClickHouse 数据库引擎,对大量输入和输出执行极速的 SQL 数据处理,而无需配置并启动 ClickHouse server。

安装 clickhouse-local

你需要为 clickhouse-local 准备一台主机,并确保该主机能够通过网络同时访问当前的源数据库系统和 ClickHouse Cloud 目标服务。

在这台主机上,根据你的操作系统下载相应的 clickhouse-local 构建包:

  1. 在本地下载 clickhouse-local 最简单的方式是运行以下命令:
curl https://clickhouse.com/ | sh
  1. 运行 clickhouse-local (它只会打印版本信息) :
./clickhouse-local
管理您的 IP Access List

在 ClickHouse Cloud 服务列表中,选择要使用的服务,然后切换到 设置。如果 IP Access List 中没有包含需要连接到您的 ClickHouse Cloud 服务的远程系统 IP 地址或地址范围,可以通过 Add IPs 解决此问题:

检查该服务是否在 IP Access List 中允许来自您的 IP 地址的流量

添加单个 IP 地址,或添加需要连接到您的 ClickHouse Cloud 服务的地址范围。按需修改表单,然后点击 保存

将您当前的 IP 地址添加到 ClickHouse Cloud 的 IP Access List 中

示例:使用 Integration 引擎从 MySQL 迁移到 ClickHouse Cloud

我们将使用 integration 表引擎 (由 mysql 表函数 即时创建) 从源 MySQL 数据库读取数据,并使用 remoteSecure 表函数 将数据写入您的 ClickHouse Cloud 服务中的目标端表。

迁移自管理 ClickHouse

在目标端 ClickHouse Cloud 服务上:

创建目标端数据库:

  CREATE DATABASE db

创建一个与 MySQL 表 schema 等效的目标端表:

  CREATE TABLE db.table ...

在 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');"
Navigation