现在企业中比较常见的从mysql中同步数据的方式是对binlog的解析,这就需要中间件canal来实现,下边就用一个案例解读一下如何使用canal把数据同步到redis中。

步骤1:安装canal

wget https://github.com/alibaba/canal/releases/download/canal-1.1.4/canal.deployer-1.1.4.tar.gz

tar zvfx canal.deployer-1.1.4.tar.gz

步骤2:配置my.cnf,创建canal用户并重启mysql

[mysqld]

log-bin=mysql-bin # 开启Binlog

binlog-format=ROW # 设置Binlog格式为ROW

server_id=1 # 配置一个ServerID

创建一个canal账户

CREATE USER canal IDENTIFIED BY 'canal123456';

GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';

FLUSH PRIVILEGES;

重启一下 MySQL,确保所有的配置生效。

systemctl start mysqld

重启后检查一下当前的 Binlog 文件和位置

步骤3:配置canal

编辑instance.properties

vim /usr/local/software/canal/conf/example/instance.properties

canal.instance.gtidon=false

# position info

canal.instance.master.address=127.0.0.1:3306

canal.instance.master.journal.name=mysql-bin.000001

canal.instance.master.position=777

canal.instance.master.timestamp=

canal.instance.master.gtid=

# username/password

canal.instance.dbUsername=canal

canal.instance.dbPassword=xxxxxxx

canal.instance.connectionCharset = UTF-8

canal.instance.defaultDatabaseName=test

# table regex

canal.instance.filter.regex=.*\\..

步骤4:启动canal

Canal 服务启动后,会开启一个端口(11111)等待客户端连接,客户端连接上 Canal 服务之后,可以从 Canal 服务拉取数据,每拉取一批数据,进行业务处理之后,给 Canal 服务返回处理成功的响应。

如果发生客户端程序宕机或者处理失败等异常情况,Canal 服务没收到处理成功的响应,下次客户端来拉取的还是同一批数据,这样就可以保证顺序并且不会丢数据。

步骤5:本地环境搭建并测试

本地需要安装redis,以及编写同步代码,代码可以参考:https://github.com/liyue2008/canal-to-redis-example

然后启动工程,canal将连接到canal服务端,canal服务端能够将从指定的binlog位置同步数据下来解析。

这里解释下原理:

Canal 模拟 MySQL 主从复制的交互协议,把自己伪装成一个 MySQL 的从节点,向 MySQL 主节点发送 dump 请求,

MySQL 收到请求后,就会开始推送 Binlog 给 Canal,Canal 解析 Binlog 字节流之后,转换为便于读取的结构化数据,

供下游程序订阅使用.

客户端连接上 Canal 服务之后,可以从 Canal 服务拉取数据,每拉取一批数据,正确写入 Redis 之后,给 Canal 服务

返回处理成功的响应。

如果发生客户端程序宕机或者处理失败等异常情况,Canal 服务没收到处理成功的响应,下次客户端来拉取的还是同一

批数据,这样就可以保证顺序并且不会丢数据。

更新数据库的一条记录,canal客户端将从服务端拉取到更新后的数据出来解析。

然后在redis查询get canal:

这样就完成了基于binlog的canal到redis的同步!

mysql redis binlog_基于binlog的canal到redis的同步相关推荐

  1. mysql master-user_【MySQL】MySQL5.6数据库基于binlog主从(Master/Slave)同步安装与配置详解...

    主从数据库同步原理 image.png 主从数据库同步工作原理(流程): 当主库的数据发生修改时,数据更改的记录将写入到主库的二进制文件中,从库此时将会调用一个IO线程读取主库的二进制文件,并与中继日 ...

  2. docker环境安装mysql、canal、elasticsearch,基于binlog利用canal实现mysql的数据同步到elasticsearch中

    文章目录 1.docker安装 1.1 基于ubuntu 1.2 基于centos7 2.数据卷统一管理 3.安装mysql 4.安装elasticsearch 5.es安装ik中文分词器 5.1 在 ...

  3. docker 安装mysql、canal、redis实现redis和mysql缓存一致性

    一.canal介绍 Canal 是用 Java 开发的基于数据库增量日志解析,提供增量数据订阅&消费的中间件. 目前,Canal 主要支持了 MySQL 的 Binlog 解析,解析完成后才利 ...

  4. 使用 Binlog 和 Canal 从 MySQL 抽取数据

    数据抽取是 ETL 流程的第一步.我们会将数据从 RDBMS 或日志服务器等外部系统抽取至数据仓库,进行清洗.转换.聚合等操作.在现代网站技术栈中,MySQL 是最常见的数据库管理系统,我们会从多个不 ...

  5. 使用Canal实现redis和mysql的同步

    使用Canal实现redis和mysql的同步 ### canal 工作思路 Canal 会将自己伪装成 MySQL 从节点(Slave),并从主节点(Master)获取 Binlog,解析和贮存后供 ...

  6. mysql binlog查看工具_数据同步工具otter(一)谈谈binlog和canal

    之前因为懒,没有针对otter做更多的解释和说明,在使用过程中,也发现了一些问题,此次补上一个完整的文档,方便大家使用. Otter是基于cannal开源的,canal又是基于mysql binlog ...

  7. mysql 日志节点恢复_基于binlog二进制日志的MySQL恢复笔记

    基于binlog二进制日志的MySQL恢复笔记 刚好复习到这里,顺手做个小实验,记录下. 总的操作流程: step0.关掉数据库的对外访问[防止用户操作继续写入这个库] step1.mysqlbinl ...

  8. mysql binlog update_mysql binlog 简单介绍与基于binlog数据恢复

    mysql binlog 简单介绍与基于binlog数据恢复 通过备份文件恢复 binlog(本节重点) binlog 二进制日志文件 show variables like 'log_bin'; 二 ...

  9. mysql bin 恢复工具_基于binlog恢复工具mysqlbinlog_flashback

    基于binlog恢复工具mysqlbinlog_flashback 简介 mysqlbinlog_back.py 是在线读取row格式的mysqld的binlog,然后生成反向的sql语句的工具. 一 ...

  10. Mysql基于binlog日志恢复数据

    Mysql基于binlog日志恢复数据 1.Linux安装mysql https://blog.csdn.net/qq_44981526/article/details/126717005 可能遇到的 ...

最新文章

  1. 乔布斯 18 岁求职信拍卖价 22.24 万美元,值吗?
  2. 限制TextBox的长度
  3. Github 开源:使用控制器操作 WinForm/WPF 控件( Sheng.Winform.Controls.Controller)
  4. mysql查询建表SQL语句
  5. HTTP协议状态码详解
  6. 分类整理我在SF上针对某些问题作的回答
  7. UEFI---(NT32)的第一个代码
  8. Azure Services Bus(服务总线)中的工作流(workflow)
  9. decimal.JS 快速入门
  10. java poi 数据透视_java 通过 poi pivotTable 实现 数据透视表
  11. matlab求随机过程的数学期望,密度函数已知,怎么用matlab求其数学期望和方差?...
  12. 20189319《网络攻防》第二周作业
  13. 金融科技方便生活,分布式架构助力微粒贷“闪电放款”
  14. vue table自定义样式
  15. acm测试题目数据生成
  16. 新开课day21+day22总结
  17. echarts饼状曲线图,中间显示总数
  18. C#使用IronPython调用Python
  19. 安⽐(SECBIT)实验室携⼿路印(Loopring)共同发布智能合约风险列表
  20. 威联通QNAP Nas同步复制文件到另外一台NAS

热门文章

  1. 【优化算法】鸽群优化算法(PIO)【含Matlab源码 1077期】
  2. 【优化求解】基于matlab粒子群算法求解货物配装优化问题【含Matlab源码 414期】
  3. 【电路仿真】基于simulink全数字锁相环设计【含Matlab源码 340期】
  4. ai人工智能_我的人工智能周:第5部分
  5. openai-gpt_GPT-3:大惊小怪的是什么?
  6. 在服务中mysql启动不了了_mysql在服务项里无法启动
  7. python短视频教程_Python技巧:10万+的短视频被批量生产了,Python表示不服
  8. linux中程序定时重启脚本,linux 程序定时重启脚本
  9. java map sort_Map 按值排序 (Map sort by value) – Java | 学步园
  10. h5应用 vue 钉钉_快速上手——钉钉H5微应用开发接入