关系数据库-7-[mysql8]的CDC数据抽取备份方式

本文介绍了MySQL 8中通过CDC(Change Data Capture)进行数据备份的方法,探讨了不同类型的CDC备份方式,并详细讲解了如何开启MySQL的binlog。接着,文章讨论了在高并发场景下,MySQL和Redis的结合使用,提出利用CDC技术将MySQL数据实时同步到Redis以优化性能。最后,展示了使用Python的mysql-replication库进行非阻塞和阻塞模式的数据监听,并给出了同步到Redis的简单示例。
摘要由CSDN通过智能技术生成

参考MySQL到Redis同步方案之基于Python的CDC变更数据捕获
参考配置MySQL CDC(Binlog)

1 数据库CDC

1.1 CDC简介

CDC是change data capture,即变化数据捕捉。
CDC是数据库进行备份的一种方式,常用于大量数据的备份工作。

CDC分为入侵式的和非入侵式的备份方法:
(1)入侵式的备份方法:基于触发器备份、基于时间戳备份、基于快照备份;
侵入式指CDC操作会给源系统带来性能影响,只要CDC操作以任何一种方式对源数据库执行了SQL操作,就认为是侵入式的。

(2)非入侵式的备份方法:基于日志的备份。

mysql基于日志的CDC就是要开启mysql binary log。

参考CDC系列(一)、Canal 集群部署及使用(带WebUI)
参考CDC系列(二)、Maxwell_v1.27.1 监控MySQL操作日志实时同步到Kafka
参考CDC系列(三)、Debezium 监控MySQL操作日志实时同步到Kafka(对比canal,maxwell)

1.2 mysql开启CDC

windows10中安装mysql8
参考windows10系统-3-离线安装mysql8

(1)查看mysql是否开启Binlog

mysql>show variables like 'log_bin';
若变量log_bin的值为“OFF”,则说明Binlog未开启,继续执行下一步。
若变量log_bin的值为“ON”,则说明Binlog已开启,继续执行以下SQL命令,
检查相关参数的配置是否符合要求。

mysql>show variables like '%binlog_format%';
mysql>show variables like '%binlog_row_image%';
变量binlog_format的值应该为“ROW”;
变量binlog_row_image的值应该为“FULL”。

在这里插入图片描述

2 应用

2.1 场景

作为一个WEB开发者,MySQL和Redis是日常应用开发中经常用到的。
MySQL作为开源的关系型数据库,以其免费、快速、体积小等特性受到众多开发者的青睐。但是在应对高并发、大数据量查询等场景就非常吃力,当然这也不是MySQL的强项。

为了解决这些问题我我们通常需要将要计算的结果缓存起来或者将高频访问的数据提前缓存,等有请求到来时直接从缓存中读取。Redis的出现完美的解决了上面的问题,其单线程安全、高速非阻塞式I/O以及精准的时间控制就是为高并发场景下缓存完美方案。

在具体的实现细节上其中一点要考虑,就是如何将请求的目的数据提前缓存到Redis中呢?

2.2 方案

大型数据库系统都提供了一种称为CDC的技术。
CDC(Change Data Capture),中文直译“数据变更捕获”,简单来说CDC能够帮助我们识别从上次提取之后发生变化的数据。利用CDC,在对源表进行INSERT、UPDATE或 DELETE等操作的同时就可以提取数据。

在获取到相关事件之后可以通过该特性直接将数据变更同步到Redis缓存中,可以构建低耦合的模块来实现Mysql到Redis的缓存方式。

SqlServer和Oracle都提供了原生支持,但是Mysql并没有提供原生支持,只能寻求第三方方案,常见的两种方式:
(1)通过Mysql主从复制,将一份数据复制到伪造的Mysql slave中,然后在“伪造slave”中完成同步等业务。

Canal由阿里开源,它将自己伪装成一个MySQL的Slave节点,
通过拉取MySQL的binlog来达到实时采集数据库的操作日志的目的,
在后面我们就可以将采集到的数据变更操作通过SparkStreaming、FlinkSQL、
KafkaConnector等工具进行数据处理和导出到其他异构数据源。

(2)另外一种是读取分析mysql二进制日志方式来实现,比如:Maxwell、Debezium、python的mysql-replication等。

Maxwell也是将自己伪装成MySQL的slave节点,
通过监控MySQL的binlog来将数据操作日志同步到kafka等消息队列中供异构数据源使用。


debezium不仅仅支持mysql的监控,目前最新版已支持mysql,postgre,mongodb,
oracle,sqlserver,db2,cassandra等,它依赖于kafka connect 服务,
通过kafka connect,我们可以很方便的将debezium采集到的数据库日志输出到各类目标端。

3 python的mysql-replication

python的mysql-replication是纯Python实现构建在PyMYSQL之上MySQL复制协议。
允许监听诸如插入,更新,删除其数据和原始SQL查询之类的事件。
常见使用场景:
(1)MySQL到NoSQL数据库复制
(2)mysql到搜索引擎复制(全文索引)
(3)在数据库中发生更改时无效缓存
(4)审计
(5)实时分析
CMD>pip install mysql-replication
在这里插入图片描述

3.1 数据库操作

(1)创建数据库

create database test;
use test;
create table test4 (id int NOT NULL AUTO_INCREMENT, data VARCHAR(255), data2 VARCHAR(255), PRIMARY KEY(id));
insert into test4 (data,data2) VALUES (
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

皮皮冰燃

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值