MySQL CDC (Change Data Capture),中文名为MySQL变化数据捕获,是一种截取MySQL主从复制流中binlog的技术,从而实时捕获数据库中的增、删、改操作。在大数据、实时计算、数据集成等领域都有广泛应用。本文将从多个方面对MySQL CDC做详细阐述,让你全面了解其背后的原理和应用场景。

一、基本原理

MySQL CDC的基本原理是使用MySQL提供的binlog,通过解析binlog中的事件来得到数据库中的增、删、改操作。具体实现步骤如下:

1、首先在MySQL中通过配置参数启用binlog,使得MySQL开始记录MySQL实例的所有数据更改操作;

[mysqld]
log-bin=mysql-bin
binlog-format=ROW
binlog-row-image=full

2、使用支持MySQL协议的binlog消费者(如Debezium、Maxwell等)连接到MySQL实例的binlog,并开始实时从binlog中截取数据;

3、解析binlog内容,获取其中的事务和事务中对数据进行的操作;

{
"database": "testdb",
"table": "user",
"type": "insert",
"ts": 1633093513,
"xid": 1,
"commit": 1,
"data": {
"id": "1",
"name": "张三",
"age": 24
}
}

4、将解析后的数据推送到下游处理过程(如实时计算引擎、数据仓库、缓存等)。

二、应用场景

MySQL CDC的应用场景广泛,下面介绍其中几个典型应用场景。

1、实时数据同步

当企业应用系统需要将MySQL的数据同步到其他数据源(如缓存、数据仓库、搜索引擎等)时,可以使用MySQL CDC实现实时数据同步。通过截取MySQL主从复制流中的binlog,将数据实时同步到其他目标数据源,实现数据的最新状态。

2、实时计算

MySQL CDC可以将数据变更事件实时推送到流式计算引擎(如Apache Flink、Apache Spark等)进行实时计算和分析。通过将实时计算的结果写回MySQL中,可以实现实时的数据统计、分析和决策。

3、数据集成

MySQL CDC可作为数据集成的中间层,通过解析binlog实现异构数据的读取和写入。例如可以将MySQL中的数据同步到MongoDB中,或将Kafka中的数据写入MySQL中。这样,在各个数据系统之间就可以实现快速、实时、可靠的数据集成。

三、实战案例

下面通过一个简单的实战案例来介绍如何使用MySQL CDC实现实时数据同步。

1、安装Debezium Connector

Debezium Connector是一种流行的开源的CDC实现,支持从MySQL、PostgreSQL等关系型数据库中提取数据变更并将其广播到Kafka。

如下是使用Docker安装Debezium Connector:

docker run -it --rm --name debezium -p 8083:8083 debezium/connect

2、创建MySQL实例和新表

create database demo;

use demo;

create table user (
id int primary key auto_increment,
name varchar(50) not null,
age int not null
);

3、启用binlog

在MySQL的配置文件中,设置启用binlog:

[mysqld]
log-bin=mysql-bin
binlog-format=ROW
binlog-row-image=full

然后重启MySQL实例,使binlog参数生效。

4、创建Debezium连接

执行以下curl命令,创建与MySQL实例的连接。

curl -i -X POST -H "Accept:application/json" -H "Content-Type:application/json" localhost:8083/connectors/ -d '
{
"name": "demo-connector",
"config": {
"connector.class":
"io.debezium.connector.mysql.MySqlConnector",
"database.hostname": "mysql",
"database.port": "3306",
"database.user": "root",
"database.password": "root",
"database.server.id": "1",
"database.server.name": "test",
"database.include.list": "demo",
"table.include.list": "demo.user",
"database.history.kafka.bootstrap.servers": "kafka:9092",
"database.history.kafka.topic": "schema-changes.demo"
}
}'

5、查看数据变更

现在我们可以通过监控Kafka中的实时数据变更事件来捕获MySQL的数据变更信息了。执行以下命令,查看demo.user表的变更事件:

docker run -it --rm --name debezium-toolkit --link debezium:kafka --network mysql-cdc_default debezium/tooling debezium-connector-mysql/bin/mysqlbinlog --raw --verbose -d demo -t user --schema=test --host=kafka --port=9092

在另一个终端窗口中,进行如下的MySQL插入操作,向demo.user表中插入一条数据:

use demo;

insert into user(name, age) values('john', 18);

插入完成后,Debezium即会输出以下信息表示成功推送该数据变更:

#...chunk of binlog...

{
"database": "demo",
"table": "user",
"type": "insert",
"ts": 1633093513,
"xid": 1,
"commit": 1,
"data": {
"id": "1",
"name": "john",
"age": 18
}
}

四、总结

MySQL CDC通过解析MySQL主从复制流中的binlog,捕获并推送数据库中的数据变更事件,为实时数据同步、实时计算和数据集成提供了有效手段。但在使用MySQL CDC时,需要注意以下几个方面:

1、binlog性能开销。当binlog文件过大时,可能会对MySQL实例造成性能开销;

2、并发访问和数据同步。使用MySQL CDC实现数据同步时,需要考虑多个数据源、并发访问、重复数据等问题;

3、CDC数据的精确度。使用MySQL CDC捕获变化数据时,需要考虑数据变更的精确度,例如在UPDATE语句中SET字段的顺序可能对捕获的结果产生影响。

MySQL-CDC原理与实践的更多相关文章

  1. mysql主从复制原理及实践

    Mysql主从复制原理及实践 mysql主从框架       MySQL主从架构是MySQL集群中最基本也是最常用的一种架构部署,能够满足很多业务需求,常见的有一主一从或者一主多从.可以防止单一主机的 ...

  2. mysql 复制原理与实践

    复制功能是将一个mysql数据库上的数据复到一个或多个mysql从数据库上. 复制的原理:在主服务器上执行的所有DDL和DML语句都会被记录到二进制日志中,这些日志由连接到它的从服务器获取,并复制到从 ...

  3. 05-雷海林-mysql备份原理与在TDSQL中的实践

    05-雷海林-mysql备份原理与在TDSQL中的实践 下载地址: http://files.cnblogs.com/files/MYSQLZOUQI/05-%E9%9B%B7%E6%B5%B7%E6 ...

  4. 学一点 MYSQL 双机异地热备份—-MYSQL主从,主主备份原理及实践

    简单介绍mysql双机,多机异地热备简单原理实战. 双机热备的概念简单说一下,就是要保持两个数据库的状态自动同步.对任何一个数据库的操作都自动应用到另外一个数据库,始终保持两个数据库数据一致. 这样做 ...

  5. MySQL主从复制介绍:使用场景、原理和实践

    MySQL主从复制介绍:使用场景.原理和实践 MySQL数据库的主从复制方案,和使用scp/rsync等命令进行的文件级别复制类似,都是数据的远程传输,只不过MySQL的主从复制是其自带的功能,无需借 ...

  6. MySQL主从复制的原理和实践操作

    MySQL 主从(MySQL Replication),主要用于 MySQL 的实时备份.高可用HA.读写分离.在配置主从复制之前需要先准备 2 台 MySQL 服务器. 一.MySQL主从原理 1. ...

  7. Atitit.软件兼容性原理与实践 v5 qa2.docx

    Atitit.软件兼容性原理与实践   v5 qa2.docx 1. Keyword2 2. 提升兼容性的原则2 2.1. What 与how 分离2 2.2. 老人老办法,新人新办法,只新增,少修改 ...

  8. Mysql主从复制原理及配置

    Mysql主从复制原理及配置 1.复制概述 Mysql内建的复制功能是构建大型,高性能应用程序的基础.将Mysql的数据分布到多个系统上去,这种分布的机制,是通过将Mysql的某一台主机的数据复制到其 ...

  9. 网络对抗课题4.3.1 SQL注入原理与实践

    网络对抗课题4.3.1 SQL注入原理与实践 原理 SQL注入漏洞是指在Web应用对后台数据库查询语句处理存在的安全漏洞.也就是,在输入字符串中嵌入SQL指令,在设计程序中忽略对可能构成攻击的特殊字符 ...

  10. 搞懂分布式技术10:LVS实现负载均衡的原理与实践

    搞懂分布式技术10:LVS实现负载均衡的原理与实践 浅析负载均衡及LVS实现 原创: fireflyc 写程序的康德 2017-09-19 负载均衡 负载均衡(Load Balance,缩写LB)是一 ...

随机推荐

  1. uni-app图片上传接口联调

    https://www.bilibili.com/video/BV1jy4y1B7pw?p=159&spm_id_from=pageDriver

  2. 分享10个高级sql写法

    本文主要介绍博主在以往开发过程中,对于不同业务所对应的 sql 写法进行归纳总结而来.进而分享给大家. 本文所讲述 sql 语法都是基于 MySql 8.0+ 博主github地址:http://gi ...

  3. 【scikit-learn基础】--『监督学习』之 空间聚类

    空间聚类算法是数据挖掘和机器学习领域中的一种重要技术. 本篇介绍的基于密度的空间聚类算法的概念可以追溯到1990年代初期.随着数据量的增长和数据维度的增加,基于密度的算法逐渐引起了研究者的关注.其中, ...

  4. vue3 路由页面返回时,恢复滚动条位置

    首先,路由必须是KeepAlive模式 <script setup lang="ts"> import { onActivated } from "vue&q ...

  5. CAP-BASE

  6. [转帖]TLS1.3 正式版发布 — 特性与开启方式科普

    https://cloud.tencent.com/developer/article/1376033 互联网工程指导委员会(IETF)释出了传输层安全性协议的最新版本 TLS 1.3.TLS 被广泛 ...

  7. [转帖]Linux命令之——rsync

    文章目录 1 rsync是干什么用的 2 rsync和scp有什么区别 3 rsync简单用法介绍 rsync四种工作方式 1. 本地文件系统上实现同步 2. 本地主机使用远程shell和远程主机通信 ...

  8. [转帖]Active Session History (ASH)

    Introduction V$ACTIVE_SESSION_HISTORY DBA_HIST_ACTIVE_SESS_HISTORY Enterprise Manager Performance Pa ...

  9. [转帖]金仓数据库KingbaseES V8R6 中unlogged表

    KingbaseESV8R6有一种表称为unlogged,在该表新建的索引也属于unlogged.和普通表的区别是,对该表进行DML操作时候不将该表的变更记录变更写入到wal文件中.在数据库异常关机或 ...

  10. 一次典型的Memroy Leak的跟踪学习过程

    背景 周四时某项目在QQ群里说自己的系统出现了CPU占用较高的情况. TOP 查看发现大部分占用CPU的都是 JAVA核心进城后附近的进程. 所以初步怀疑 是出现了FullGC的问题. 然后群里反馈了 ...