• Clickhouse同步mysql(基于物化引擎)


    一、Mysql引擎(不推荐)

    同步注意事项:1、库名规范不能有“-”,表名规范不能有“-”

    1. CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
    2. ENGINE = MySQL('host:port', ['database' | database], 'user', 'password')

    参数说明:

    • host:port — MySQL服务地址
    • database — MySQL数据库名称
    • user — MySQL用户名
    • password — MySQL用户密码

    MySQL引擎将远程的MySQL服务器中的表/库映射到ClickHouse中,MySQL数据库引擎会将对其的查询转换为MySQL语法并发送到MySQL服务器中(等同于直接使用mysql)

    1. 数据库同步:
    2. CREATE DATABASE IF NOT EXISTS mysql_db ENGINE = MySQL ('localhost:3306''mysql''root''123456');
    3. 表同步:
    4. CREATE TABLE IF NOT EXISTS tmp ENGINE = MergeTree ORDER BY id AS SELECT * FROM mysql('localhost:3306','test','user','root','123456')

    二、MaterializedMySQL(好用,但是官方还在实验阶段)

    1. CREATE DATABASE [IF NOT EXISTS] db_name [ON CLUSTER cluster]
    2. ENGINE = MaterializedMySQL('host:port', ['database' | database], 'user', 'password') [SETTINGS ...]
    3. [TABLE OVERRIDE table1 (...), TABLE OVERRIDE table2 (...)]

    创建ClickHouse数据库,包含MySQL中所有的表,以及这些表中的所有数据。

    ClickHouse服务器作为MySQL副本工作。它读取binlog并执行DDL和DML查询

     1、mysql开启binlog和GTID

    vim /etc/mysql/my.cnf

    1. [mysqld]
    2. # 指定binlog日志存储位置
    3. #log-bin=/data/logs/mysql/mysql-bin.log
    4. log-bin=/var/lib/mysql/mysql-bin
    5. # 开启GTID模式
    6. gtid-mode=ON
    7. # 设置主从强一致性
    8. enforce-gtid-consistency=1
    9. # 记录日志
    10. log-slave-updates=1
    11. binlog_format=ROW

    2、创建复制管道

    1. #开启物化引擎
    2. SET allow_experimental_database_materialized_mysql=1;
    3. CREATE DATABASE yfc
    4. ENGINE = MaterializeMySQL('localhost:3306', 'yfc', 'root', '123456')

    优点:通过监听mysql的binlog文件,实现增量更新,提升了效率

    数据限制:

    1、同步mysql数据之前,mysql的每张表应该都有primary key(如果没有主键,同步会报错)

    2、MaterializedMySQL是库级别的引擎,同步的时候会以全库中表数据同步

    3、mysql数据同步到clickhouse后会发生索引转换:在ClickHouse表中,MySQL的 PRIMARY KEY 和 INDEX 子句被转换为 ORDER BY 元组

    4、mysql在转换为clickhouse表的时候,每张表都会新增两个字段:_sign(1:写入、-1:删除),_version

    5、在clickhouse中同步新增时,并没有实现物理意义上的删除,只通过_sign标志字段来实现数据过滤

    6、在mysql转化clickhouse时,默认使用的ReplacingMergeTree引擎,保证没有重复数据出现

    实例:

    1. #1、查询同步的数据库
    2. show databses;
    3. use yfc;
    4. show tables;

    1. #2、查看建表语句
    2. show create table sku_info;

    1. #3、查询同步的数据
    2. select *,_sign,_version from sku_info;

    1. #4、新增数据(往mysql的sku_info表中插入数据)
    2. INSERT INTO `yfc`.`sku_info`(`id`, `sku_code`) VALUES (3, '10003');
    1. #5、修改数据
    2. UPDATE `yfc`.`ts_store_info` set cust_name = '连调测试' where id= 111;

     

    1. #6、删除数据
    2. DELETE FROM `yfc`.`sku_info` where id= 3;

     

    三、mysql表函数

    四、datax

  • 相关阅读:
    tessafe.sys不兼容驱动程序怎么解决?
    VB.net实战(VSTO):Excel插件设计Ribbon界面
    win10,WSL的Ubuntu配python3.7手记
    开发者福利!李彦宏将在百度世界大会手把手教你做AI原生应用
    [NPUCTF2020]ezlogin xPATH注入
    你知道有哪些好用的数据分析工具类软件?
    Android Studio一直出现这个问题,尝试了很多方法都无法解决
    awk提取nginx日志相应字段
    Yolov8目标识别与实例分割——算法原理详细解析
    es笔记三之term,match,match_phrase 等查询方法介绍
  • 原文地址:https://blog.csdn.net/qq_39243221/article/details/125501702