Clickhouse基于物化引擎(MaterializedMySQL)来同步mysql
创建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 KEY
和 INDEX
子句被转换为 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相关推荐
- canal mysql从库_大厂如何基于binlog解决多机房同步mysql数据(一)?
目录 前言 单一IDC 多IDC mysql主从同步 数据同步方案 多机房mysql同步方案 优化同步方案 同步方案的问题 如何解决重复插入 对于DDL语句处理 如何解决唯一索引冲突 如何解决数据回环 ...
- clickhouse 同步 mysql数据
前言 通过前面的篇章,我们了解到clickhouse是一款性能很高的OLAP数据存储.数据分析型数据库引擎,主要用于在线分析处理查询(OLAP),能够使用 SQL 查询实时生成分析数据报告,基于此,在 ...
- 19_clickhouse,数据查询与写入优化,分布式子查询优化,外部聚合/排序优化,基于JOIN引擎的优化,SQL优化案例,物化视图提速,查询优化常用经验法则,选择和主键不一样的排序键,数据入库优化
25.数据查询与写入优化 25.1.分布式子查询优化 25.1.1.分布式表的IN查询示例1(普通IN子查询.IN子查询为本地表) 25.1.2.分布式表的IN查询示例2(普通IN子查询.IN子查询为 ...
- 如何基于Canal 和 Kafka,实现 MySQL 的 Binlog 近实时同步
转载自 如何基于Canal 和 Kafka,实现 MySQL 的 Binlog 近实时同步 近段时间,业务系统架构基本完备,数据层面的建设比较薄弱,因为笔者目前工作重心在于搭建一个小型的数据平台.优先 ...
- 大数据—— Clickhouse 介绍与引擎的使用
一.Clickhouse 介绍 1.1 Clickhouse 介绍 ClickHouse 是一个用于联机分析(OLAP)的列式数据库管理系统(DBMS).最初 是一款名为 Yandex.Metrica ...
- ClickHouse的表引擎介绍(三)
文章目录 引入表引擎的概念以及特点 一.TinyLog 二.Memory 三.MergeTree 四.ReplacingMergeTree 五.SummingMergeTree 六.Integrati ...
- TokuDB · 引擎特性 · HybridDB for MySQL高压缩引擎TokuDB 揭秘
HybridDB for MySQL(原名petadata)是面向在线事务(OLTP)和在线分析(OLAP)混合场景的关系型数据库.HybridDB采用一份数据存储来进行OLTP和OLAP处理,解决了 ...
- Clickhouse Engine kafka 将kafka数据同步clickhouse
本篇文章转自:https://blog.csdn.net/weixin_41461992/article/details/106790507 起因 由于需要做各种数据库摆渡到kafka的组件研究. 其 ...
- 基于X-Engine引擎的实时历史数据库解决方案揭秘
实时历史库需求背景 在当今的数字化时代,随着业务的迅速发展,每天产生的数据量会是一个惊人的数量,数据库存储的成本将会越来越大,通常的做法是对历史数据做归档,即将长期不使用的数据迁移至以文件形式存储的廉 ...
最新文章
- 修改Java-source版本
- 使用Telnet与ssh协议远程登录linux系统
- ironpython2.7.9_Microsoft IronPython_.NET和Python实现平台下载 v2.7.9.1000最新官方版
- 梅朵是藏语鲜花的意思
- eclipse中文版界面设置黑色_硬核干货总结IDEA开发的26个常用设置
- Java—CountDownLatch使用详解
- android 偏好设置,SharedPreferences保存、显示用户偏好设置
- [原创]java WEB学习笔记35:java WEB 中关于绝对路径 和相对路径问题
- 【学习OpenCV4】图像像素数据类型的转换与归一
- NEAT(NeuroEvolution of Augmenting Topologies)算法详解与实践(基于NEAT-Python)
- IntelliJ IDEA安装lombok
- Python基础笔记(全)
- unity游戏开发学习笔记
- C1任务01 #记录与总结 #C无止境21040904在职C1组
- K8S教程(7)使用探针对容器进行健康检查
- 30系列显卡安装tensorflow1.15
- 微信已发图片群里服务器撤回,怎样撤回微信群发的信息?撤不回怎么办?
- Parsing error: No Babel config file detected for xxx Either disable config file checking with requir
- 10分钟上手pythonpandas_【译】10分钟学会Pandas
- leetcode抢救