clickhouse实时同步MySQL数据

两种方式

        1、使用clickhouse表引擎,直接从MySQL中读取数据(针对表),如果业务需求不是很复杂,可以选择此方式,需要哪张表就配置哪张表,操作简单,数据实时同步;

        2、使用clickhouse数据库引擎,同步MySQL数据库,配置稍微复杂一点,我是没有配置成功,这里就不介绍了。因为我使用的是mariadb(10.5.16),某些配置项不存在,网上也没找到,就没有研究了,有调通的小伙伴可以评论交流。

        方式2已经有解决方案:

        https://mp.csdn.net/mp_blog/creation/editor/131109231

一、配置MySQL

        1、准备好数据库以及数据表

                CREATE DATABASE db1;

                

                CREATE TABLE db1.table1 (
                        id INT,
                        column1 VARCHAR(255)
                );

        2、随便插入点数据

                INSERT INTO db1.table1
                        (id, column1)
                VALUES
                        (1, 'abc'),
                        (2, 'def'),
                        (3, 'ghi');

        3、创建数据库连接账号并赋予权限

                供clickhouse通过表引擎连接MySQL使用

                CREATE USER 'mysql_clickhouse'@'%' IDENTIFIED BY 'Password123!';

                GRANT ALL PRIVILEGES ON *.* TO 'mysql_clickhouse'@'%';

二、配置clickhouse

        1、创建表并使用表引擎连接MySQL数据库中的表

                CREATE TABLE mysql_table1 (
                        id UInt64,
                        column1 String
                )
                ENGINE = MySQL('127.0.0.1','db1','table1','mysql_clickhouse','Password123!')

参数描述
host主机名或 IP127.0.0.1
databaseMySQL 数据库名称db1
tableMySQL 表名table1
user用于连接到 MySQL 的用户名mysql_clickhouse
password用于连接到 MySQL 的密码Password123!

三、测试

        1、在MySQL中插入数据:

                INSERT INTO db1.table1
                        (id, column1)
                VALUES
                        (4, 'jkl');

        2、在clickhouse中查询

                SELECT
                        id,
                        column1
                FROM mysql_table1

                你会发现刚刚在MySQL中插入的数据

                Query id: 6d590083-841e-4e95-8715-ef37d3e95197

                ┌─id─┬─column1─┐
                │  1 │ abc     │
                │  2 │ def     │
                │  3 │ ghi     │
                │  4 │ jkl     │
                └────┴─────────┘

                4 rows in set. Elapsed: 0.044 sec.

        3、在clickhouse中插入数据

                INSERT INTO mysql_table1
                        (id, column1)
                VALUES
                        (5,'mno')

        4、在MySQL中查询

                mysql> select id,column1 from db1.table1;

                你会发现在clickhouse中插入的数据

                +------+---------+
                | id   | column1 |
                +------+---------+
                |    1 | abc     |
                |    2 | def     |
                |    3 | ghi     |
                |    4 | jkl     |
                |    5 | mno     |
                +------+---------+
                5 rows in set (0.01 sec)

四、总结

        通过表引擎连接MySQL,可以实现双向数据同步,简单快捷,需要哪张表就连接哪张表,当数据量不大时,没什么影响,我找到了一张mariadb中45个G的表,配置好表引擎连接之后,数据是加载不出来的,感觉clickhouse只是通过MySQL表引擎连接上了MySQL数据库,查询还是通过MySQL来查询的,45个G的数据量并不小,MySQL查询耗时较高,clickhouse加载超时时间为30s,加载不出来。

        另外,可以通过在clickhouse创建只读权限的数据库连接账号,即可控制双向数据同步时读写权限的区分了,MySQL自身就可以配置主从,如果使用MySQL从库来和clickhouse进行连接的话,必须要控制好读写权限,MySQL从库一旦写入数据之后,等到下一次主库同步数据至从库时,必然会导致MySQL主从断开,一定注意!!!

  • 26
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值