tencent cloud

文档反馈

MySQL 数据导入

最后更新时间:2021-07-01 10:54:07

    概述

    本文介绍两种将 MySQL 数据库中的数据导入到 ClickHouse 集群的方案。

    • 利用 ClickHouse 支持 MySQL 外表的特性来实现。
    • 使用 Altinity 提供的 clickhouse-mysql-data-reader 工具来实现数据导入。

    本文示例中,将 MySQL 数据表 test.clickhouse_test 中的数据导入到 ClickHouse 集群中,该表的 Schema 如下:

    基于 MySQL 表引擎来实现数据导入(简易方案)

    ClickHouse 的 MySQL 表引擎可以对存储在远程 MySQL 服务器上的数据执行 SELECT 查询。基于这样能力,利用CREATE ... SELECT * FROM或者INSERT INTO ... SELECT * FROM语句即可完成数据导入。

    具体步骤:

    • 步骤1:在 ClickHouse 中创建 MySQL 表引擎。
    • 步骤2:建立 ClickHouse 表。
    • 步骤3:将步骤1中的外表中数据,导入到 ClickHouse 表中。

    还可以将步骤2/3合并成一个步骤,即采用 CREATE TABLE AS SELECT * FROM 方式来达到同样效果。

    ClickHouse 支持 MySQL 外表引擎,是否还有必要将数据导入到 ClickHouse 中?
    是非常有必要的。MySQL 外表引擎,本身不存储数据,数据存储在 MySQL 中。在复制查询中,特别是有 JOIN 的情况下,访问外表是相当慢的,甚至不可能完成。该方案有明显缺陷,无法增量导入数据。

    基于 Altinity 的工具实现数据导入(推荐方案)

    Altinity 提供了一个工具 clickhouse-mysql-data-reader 来实现数据导入。该工具可以实现 MySQL 的存量数据导出和增量数据的导出。

    按照官网推荐,使用 pypy 工具能够显著提升 clickhouse-mysql-data-reader 导入数据的性能。

    工具准备

    • 步骤1:下载 pypy3.6-7.2.0,解压到 pypy 目录下。
    • 步骤2:安装 clickhouse-mysql。如果是在腾讯云 ClickHouse 集群,完成下面安装操作后,工具已经集成,开箱即用,无需配置。
      • 安装 pip:执行 pypy/bin/pypy3 -m ensurepip
      • 安装 mysql-replication,clickhouse-driver,执行 pypy/bin/pip3 install mysql-replicationpypy/bin/pip3 install clickhouse-driver
      • 安装 clickhouse-mysql 并初始化,执行 pypy/bin/pip3 install clickhouse-mysql,执行 pypy/bin/clickhouse-mysql --install
      • 安装 clickhouse-client,执行 yum install -y clickhouse-client
      • 安装 mysql-community-devel,执行 yum install -y mysql-community-devel
    • 步骤3:数据库权限准备,所需权限为 SUPER、REPLICATION CLIENT。
      CREATE USER 'root'@'%' IDENTIFIED BY 'cloud';
      GRANT SELECT, REPLICATION CLIENT, REPLICATION SLAVE, SUPER ON *.* TO 'root'@'%';
      FLUSH PRIVILEGES;
      

    数据导入

    准备工作完成后,即可使用该工具完成数据从 MySQL 导入到 ClickHouse 集群中。具体步骤如下:

    1. 使用 clickhouse-mysql-data-reader 生成建表 SQL。

      然后修改 SQL 语句,选择合适的表引擎(在本示例中使用 TinyLog)。执行建表语句 clickhouse-client -m < create.sql
    2. 导入存量数据
    3. 导入增量数据

      其中,参数含义如下:
      参数 说明
      src-host MySQL 数据库 IP
      src-user MySQL 数据库用户名
      src-password MySQL 数据库密码
      create-table-sql-template 生产 ClickHouse 的建表脚本
      with-create-database 建表脚本中增加创建数据库语句
      src-tables 源表(MySQL 表)
      mempool-max-flush-interval mempool flush 的时间周期
      src-server-id 源 MySQL 是否为 master 节点
      src-resume 断点续传
      src-wait 等待数据
      nice-pause 如果没有数据,睡眠的时间间隔
    联系我们

    联系我们,为您的业务提供专属服务。

    技术支持

    如果你想寻求进一步的帮助,通过工单与我们进行联络。我们提供7x24的工单服务。

    7x24 电话支持