美文网首页
mysql2ch,一个同步MySQL数据到ClickHouse的

mysql2ch,一个同步MySQL数据到ClickHouse的

作者: long2ice | 来源:发表于2020-03-19 21:04 被阅读0次

    介绍

    mysql2ch 是一个用于同步 MySQL 到 ClickHouse 的工具,支持全量同步与增量同步。

    mysql2ch.png

    特性

    • 支持全量同步与增量同步。
    • 支持 DDL 与 DML,当前支持 DDL 字段新增与删除,支持所有的 DML。
    • 丰富的配置项。
    • 生产者与消费者 ui 监控。

    依赖

    • kafka,用户缓冲 MySQL binlog 的消息队列。
    • redis,缓存 MySQL binlog position 与 file。

    安装

    pip install mysql2ch
    

    使用

    在当前执行目录创建.env或者设置系统环境变量:

    .env

        # 设置为True会打印SQL
        DEBUG=True
    
        # 监控界面配置
        UI_ENABLE=True
        UI_REDIS_DB=1
        UI_MAX_NUM=60
    
        # sentry配置
        ENVIRONMENT=development
    
        MYSQL_HOST=127.0.0.1
        MYSQL_PORT=3306
        MYSQL_USER=root
        MYSQL_PASSWORD=123456
        MYSQL_SERVER_ID=101
    
        REDIS_HOST=127.0.0.1
        REDIS_PORT=6379
        REDIS_DB=0
    
        CLICKHOUSE_HOST=127.0.0.1
        CLICKHOUSE_PORT=9002
        CLICKHOUSE_PASSWORD=
        CLICKHOUSE_USER=default
    
        SENTRY_DSN=https://3450e192063d47aea7b9733d3d52585f@sentry.test.com/1
    
        KAFKA_SERVER=127.0.0.1:9092
        KAFKA_TOPIC=mysql2ch
    
        # 配置需要同步的数据表
        SCHEMA_TABLE=test.test;
        # 配置kafka分区与schema映射
        PARTITIONS=test=0;
    
        # 初始binlog信息,后续会从redis读取
        INIT_BINLOG_FILE=binlog.000474
        INIT_BINLOG_POS=155
    
        # 每多少条提交一次
        INSERT_NUMS=20000
        # 每多少秒提交一次
        INSERT_INTERVAL=60
    
    

    全量同步

    你可能需要在开始增量同步之前进行一次全量导入,或者使用--renew重新全量导入。

        $ mysql2ch etl -h
    
        usage: mysql2ch etl [-h] --schema SCHEMA [--tables TABLES] [--renew]
    
        optional arguments:
          -h, --help       show this help message and exit
          --schema SCHEMA  Schema to full etl.
          --tables TABLES  Tables to full etl,multiple tables split with comma.
          --renew          Etl after try to drop the target tables.
    

    生产者

    监听 MySQL binlog 并生产至 kafka。

    mysql2ch produce
    

    消费者

    从 kafka 消费并插入 ClickHouse,使用--skip-error跳过错误行。

        $ mysql2ch consume -h
    
        usage: mysql2ch consume [-h] --schema SCHEMA [--skip-error] [--auto-offset-reset AUTO_OFFSET_RESET]
    
        optional arguments:
          -h, --help            show this help message and exit
          --schema SCHEMA       Schema to consume.
          --skip-error          Skip error rows.
          --auto-offset-reset AUTO_OFFSET_RESET
                                Kafka auto offset reset,default earliest.
    

    监控界面

        $ mysql2ch ui -h
    
        usage: mysql2ch ui [-h] [--host HOST] [-p PORT]
    
        optional arguments:
          -h, --help            show this help message and exit
          --host HOST           Listen host.
          -p PORT, --port PORT  Listen port.
    

    使用 docker-compose(推荐)

    version: "3"
    services:
      producer:
        env_file:
          - .env
        depends_on:
          - redis
        image: long2ice/mysql2ch:latest
        command: mysql2ch produce
      # add more service if you need.
      consumer.test:
        env_file:
          - .env
        depends_on:
          - redis
          - producer
        image: long2ice/mysql2ch:latest
        # consume binlog of test
        command: mysql2ch consume --schema test
      redis:
        hostname: redis
        image: redis:latest
        volumes:
          - redis:/data
      ui:
        env_file:
          - .env
        ports:
          - 5000:5000
        depends_on:
          - redis
          - producer
          - consumer
        image: long2ice/mysql2ch
        command: mysql2ch ui
    volumes:
      redis:
    

    可选

    Sentry,错误报告,在.env配置 SENTRY_DSN后开启。

    开源许可

    本项目遵从 MIT开源许可。

    相关文章

      网友评论

          本文标题:mysql2ch,一个同步MySQL数据到ClickHouse的

          本文链接:https://www.haomeiwen.com/subject/sudryhtx.html