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

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

语法:

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

1,mysql开启binlog和GTID

修改配置文件/etc/mysql/my.cnf

[mysqld]
# 指定binlog日志存储位置
log_bin=/var/lib/mysql/mysql-bin
# 这里一定是row格式
binlog_format=ROW# 开启GTID模式
gtid_mode=ON
# 设置主从强一致性
enforce_gtid_consistency=1
# 记录日志
log_slave_updates=1

2,创建复制管道

set global on cluster default max_partitions_per_insert_block = 10000;#开启物化引擎
SET allow_experimental_database_materialized_mysql=1;CREATE DATABASE mt ENGINE = MaterializeMySQL('localhost:3306', 'mt', 'root', '123456')

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

数据限制:

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

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

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

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

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

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

查看状态:

1、查询同步的数据库

show databses;
use mt;
show tables;

2、查看建表语句

show create table sku_info;

3、查询同步的数据

select *,_sign,_version from sku_info;

总结

  • 通过上面的测试我们发现clickhouse的删除动作也是实时同步的,原因在于我们创建的MaterializeMySQL engine会默认为每一张表生成ReplacingMergeTree engine,当clickhouse遇到删除的binlog操作时,会将这条数据的_sign字段设为-1;
    目前ReplacingMergeTree还只是标记性删除,并非物理上的实际删除,索引随着删除日志的增多,查询过滤会有一定的负担。

  • MaterializeMySQL DataBase中的ReplacingMergeTree Engine表查询不再需要额外添加final修饰符了:

select * from scene
##等同于
select * from scene final
  • 需要注意的是20.8版本目前还不是稳定版,如果mysql中没有设置主键字段时,会在创建MaterializeMySQL数据库时报错:
DB::Exception: The db.scene cannot be materialized, because there is no primary keys.

主键字段和索引字段不允许为NULL

Rewritten MySQL DDL Query ... wasn't finished successfully: Code: 44, e.displayText() = DB::Exception: Sorting key cannot contain nullable columns

不过该ISSUES目前已被重视,20.7版本在create table 时解决了这个问题,可以通过设置allow_nullable_key=1来解决,但因为MaterializeMySQL是自动创建的数据表,所以该问题还是存在的,相信不久的版本在创建MaterializeMySQL DataBase时 也会解决这个问题

CREATE TABLE nullable_key (k Nullable(int), v int) ENGINE MergeTree ORDER BY k SETTINGS allow_nullable_key = 1;
  • clickhouse单线程写入能力可以达到每秒几十万,在一般业务体系下增量更新的模式是完全没有问题的。

Clickhouse基于物化引擎(MaterializedMySQL)来同步mysql相关推荐

  1. canal mysql从库_大厂如何基于binlog解决多机房同步mysql数据(一)?

    目录 前言 单一IDC 多IDC mysql主从同步 数据同步方案 多机房mysql同步方案 优化同步方案 同步方案的问题 如何解决重复插入 对于DDL语句处理 如何解决唯一索引冲突 如何解决数据回环 ...

  2. clickhouse 同步 mysql数据

    前言 通过前面的篇章,我们了解到clickhouse是一款性能很高的OLAP数据存储.数据分析型数据库引擎,主要用于在线分析处理查询(OLAP),能够使用 SQL 查询实时生成分析数据报告,基于此,在 ...

  3. 19_clickhouse,数据查询与写入优化,分布式子查询优化,外部聚合/排序优化,基于JOIN引擎的优化,SQL优化案例,物化视图提速,查询优化常用经验法则,选择和主键不一样的排序键,数据入库优化

    25.数据查询与写入优化 25.1.分布式子查询优化 25.1.1.分布式表的IN查询示例1(普通IN子查询.IN子查询为本地表) 25.1.2.分布式表的IN查询示例2(普通IN子查询.IN子查询为 ...

  4. 如何基于Canal 和 Kafka,实现 MySQL 的 Binlog 近实时同步

    转载自 如何基于Canal 和 Kafka,实现 MySQL 的 Binlog 近实时同步 近段时间,业务系统架构基本完备,数据层面的建设比较薄弱,因为笔者目前工作重心在于搭建一个小型的数据平台.优先 ...

  5. 大数据—— Clickhouse 介绍与引擎的使用

    一.Clickhouse 介绍 1.1 Clickhouse 介绍 ClickHouse 是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS).最初 是一款名为 Yandex.Metrica ...

  6. ClickHouse的表引擎介绍(三)

    文章目录 引入表引擎的概念以及特点 一.TinyLog 二.Memory 三.MergeTree 四.ReplacingMergeTree 五.SummingMergeTree 六.Integrati ...

  7. TokuDB · 引擎特性 · HybridDB for MySQL高压缩引擎TokuDB 揭秘

    HybridDB for MySQL(原名petadata)是面向在线事务(OLTP)和在线分析(OLAP)混合场景的关系型数据库.HybridDB采用一份数据存储来进行OLTP和OLAP处理,解决了 ...

  8. Clickhouse Engine kafka 将kafka数据同步clickhouse

    本篇文章转自:https://blog.csdn.net/weixin_41461992/article/details/106790507 起因 由于需要做各种数据库摆渡到kafka的组件研究. 其 ...

  9. 基于X-Engine引擎的实时历史数据库解决方案揭秘

    实时历史库需求背景 在当今的数字化时代,随着业务的迅速发展,每天产生的数据量会是一个惊人的数量,数据库存储的成本将会越来越大,通常的做法是对历史数据做归档,即将长期不使用的数据迁移至以文件形式存储的廉 ...

最新文章

  1. 修改Java-source版本
  2. 使用Telnet与ssh协议远程登录linux系统
  3. ironpython2.7.9_Microsoft IronPython_.NET和Python实现平台下载 v2.7.9.1000最新官方版
  4. 梅朵是藏语鲜花的意思
  5. eclipse中文版界面设置黑色_硬核干货总结IDEA开发的26个常用设置
  6. Java—CountDownLatch使用详解
  7. android 偏好设置,SharedPreferences保存、显示用户偏好设置
  8. [原创]java WEB学习笔记35:java WEB 中关于绝对路径 和相对路径问题
  9. 【学习OpenCV4】图像像素数据类型的转换与归一
  10. NEAT(NeuroEvolution of Augmenting Topologies)算法详解与实践(基于NEAT-Python)
  11. IntelliJ IDEA安装lombok
  12. Python基础笔记(全)
  13. unity游戏开发学习笔记
  14. C1任务01 #记录与总结 #C无止境21040904在职C1组
  15. K8S教程(7)使用探针对容器进行健康检查
  16. 30系列显卡安装tensorflow1.15
  17. 微信已发图片群里服务器撤回,怎样撤回微信群发的信息?撤不回怎么办?
  18. Parsing error: No Babel config file detected for xxx Either disable config file checking with requir
  19. 10分钟上手pythonpandas_【译】10分钟学会Pandas
  20. leetcode抢救

热门文章

  1. OpenCv-C++-亚像素级别角点检测(检测子像素中的corner的位置)
  2. 【IM】网易lM聊天列表UI
  3. Python 给定初值,二阶微分方程使用 Runge-kutta 方法
  4. 魔鬼细节之Java Programming
  5. 2018-8-7 直播课堂笔记
  6. 推荐三款换装变脸软件给你
  7. 肖仰华:知识图谱如何解决行业智能化的工程问题?
  8. 很多语言转换成javaScript,介绍,转载
  9. JDBC:JDBC工具类JDBCUtils
  10. Flash 视频蓬勃发展