10.【canal】canal从入门到放弃-mysql+canal+rocketmq实现数据库同步-canal简单使用

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
日志服务 SLS,月写入数据量 50GB 1个月
简介: 【canal】canal从入门到放弃-mysql+canal+rocketmq实现数据库同步-canal简单使用

前文如下:

8.【canal】canal从入门到放弃-mysql+canal+rocketmq实现数据库同步-mysql安装

9.【canal】canal从入门到放弃-mysql+canal+rocketmq实现数据库同步-canal安装

3.1 测试

# mysql增加数据[anchu@localhost support-files]$ mysql -u root -P 3306 -h 192.168.120.110 -D test -pEnter password: 123456mysql> insert into test(id,name) values(1,"t1");Query OK, 1 row affected (0.04 sec)mysql> mysql> insert into test(id,name) values(2,"t2");Query OK, 1 row affected (0.02 sec)mysql> \qBye#查看canal本地同步数据
[anchu@localhost example]$ cat ../canal.properties |grep h2canal.instance.tsdb.url = jdbc:h2:${canal.instance.tsdb.dir}/h2;CACHE_SIZE=1000;MODE=MYSQL;canal.instance.tsdb.spring.xml = classpath:spring/tsdb/h2-tsdb.xml[anchu@localhost example]$ ll -h ../../conf/example/total 120K-rw-rw-r--. 1 anchu anchu 116K Apr 26 23:21 h2.mv.db-rwxrwxr-x. 1 anchu anchu 2.2K Apr 26 23:19 instance.properties
复制代码

需要注意canal.properties配置文件的几个相对路径配置,方便查看数据

# 使用本地文件创建的连接canal.conf.dir = ../conf  #/home/anchu/software/canal/confcanal.file.data.dir= ${canal.conf.dir}  #/home/anchu/software/canal/confcanal.instance.tsdb.dir = ${canal.file.data.dir:../conf}/${canal.instance.destination:}   # /home/anchu/software/canal/conf/examplecanal.instance.tsdb.url = jdbc:h2:${canal.instance.tsdb.dir}/h2;CACHE_SIZE=1000;MODE=MYSQL;# 及上面的h2文件为什么会在 /home/anchu/software/canal/conf/example/h2.mv.db 目录,是从这里配置的
复制代码

可以将文件copy到windows并用dbeaver打开是否有添加的数据。

可以下载客户端去查询 dbschema.com/download.ht…

也可以下载驱动jdbc查询如下:

网络异常,图片无法展示
|

出现异常:General error: "The write format 1 is smaller than the supported format 2 [2.1.210/5]"

原因canal的h2版本和测试代码的版本不一致,将canal的h2包copy到测试代码,再次测试

[anchu@localhost lib]$ pwd/home/anchu/software/canal/lib[anchu@localhost lib]$ ls |grep h2h2-1.4.196.jar
复制代码

或者查看生成的h2.mv.db文件,查询test和insert关键字,可以看到数据更新信息同步到h2中

网络异常,图片无法展示
|

发现找不到test表,明明h2文件看到了关键字,却查不到这是为什么呢?\

网络异常,图片无法展示
|

那是因为,canal 使用 tsdb 保存保存表结构 meta的信息变化,本地使用默认使用的 h2db,可以配置为mysql

参考文档:blog.csdn.net/wfh45678/ar…

由于版本问题,修改canal lib包的h2版本为2.1.210,然后就可以通过h2查看别结构元数据信息

[anchu@localhost lib]$ mv h2-1.4.196.jar h2-1.4.196.jarold[anchu@localhost lib]$ mv h2-2.1.210.jarold h2-2.1.210.jar[anchu@localhost lib]$ ll |grep h2-rwxrwxr-x. 1 anchu anchu 1821816 Oct 13  2017 h2-1.4.196.jarold-rw-r--r--. 1 anchu anchu 2531600 Jan 17 01:12 h2-2.1.210.jar
复制代码

网络异常,图片无法展示
|

网络异常,图片无法展示
|

由上图可以以看到,元数据信息变化表,会存储ddl语句相关日志文件及其偏移量。\

我们可以借助mysql提供的mysqlbinlog工具进行查看,操作如下:

mysqlbinlog --base64-output=decode-rows --start-position="219" ~/software/mysql-5.7.24/data/mysql-bin.000001/*!50530 SET @@SESSION.PSEUDO_SLAVE_MODE=1*/;/*!50003 SET @OLD_COMPLETION_TYPE=@@COMPLETION_TYPE,COMPLETION_TYPE=0*/;DELIMITER /*!*/;# at 219#220427  2:19:02 server id 1  end_log_pos 313 CRC32 0xacaaf5d4   Query  thread_id=7  exec_time=0  error_code=0SET TIMESTAMP=1651051142/*!*/;SET @@session.pseudo_thread_id=7/*!*/;SET @@session.foreign_key_checks=1, @@session.sql_auto_is_null=0, @@session.unique_checks=1, @@session.autocommit=1/*!*/;SET @@session.sql_mode=1075838976/*!*/;SET @@session.auto_increment_increment=1, @@session.auto_increment_offset=1/*!*/;/*!\C utf8 *//*!*/;SET @@session.character_set_client=33,@@session.collation_connection=33,@@session.collation_server=8/*!*/;SET @@session.lc_time_names=0/*!*/;SET @@session.collation_database=DEFAULT/*!*/;create database test/*!*/;# at 313............
复制代码

如图:可以看到219开始确实紧跟着create database test\

网络异常,图片无法展示
|

3.2 扩展

binlog日志类型

  • statement:记录执行的语句;对于更新而言不需要记录大量的行数据,但是有些信息无法记录比如随机数或者当前时间,所以还需要一些上下文信息。
  • row:只记录修改的行,不用上下文,但是数据量可能较大。
  • mixed:对于不需要上下文的语句,使用statement,否则使用row,所以会 同时存在两种格式;

如何查看binlog

  • 如果在mysql客户端内,可以使用show binlog events;这条命令会显示第一个binlog文件内的事件;当然可以指定binlog文件,比如:show binlog events in 'xxx-bin.0000N'。另外也可以使用show binary logs命令查看当前所有binlog文件名。
  • 如果不在mysql客户端,可以使用mysql提供的mysqlbinlog命令。比如:mysqlbinlog -v --base64-output=decode-rows --start-position="156" ~/mysql/master/data/mysql-bin.000004
  • 简单记一下几个参数的含义:
  • -v:将row模式的反解为statement模式,方便查阅;
  • --base64-output:如果不加,默认输出是base64格式的,加上这个参数,输出是base64解密后的;\
  • --start-position:指定开始位置,当然也可以指定结束位置;
  • 另外还有一些其他参数也可以指定,比如库名以及表名等。

binlog事件类型

  • 总共有3个版本:v1,v2和v4。mysql5以上使用过的v4。这里只记录这几个关键的事件类型:
  • QUERY_EVENT:在statement模式下,增删改的语句都会生成该事件;在row模式下,DDL的改动会生成该事件;
  • ROTATE_EVENT:新的binlog文件生成时,会记录该事件,内容就是下一个binlog文件的文件名;
  • FORMAT_DESCRIPTION_EVENT:每一个binlog文件的起始事件,描述文件属性;
  • TABLE_MAP_EVENT:在row模式下会有,每一个更新事件都会先有一个TABLE_MAP_EVENT事件,用于记录表的一些信息。
  • WRITE_ROWS_EVENT:在row模式下会有,insert;
  • UPDATE_ROWS_EVENT:在row模式下会有,update;
  • DELETE_ROWS_EVENT:在row模式下会有,delete

网络异常,图片无法展示
|

参考文档:

开源实战 | Canal生产环境常见问题总结与分析

cloud.tencent.com/developer/a…

3.3 canal client测试

测试消费,canal开源项目地址中有个测试用例,只需要修改ip然后启动

github.com/alibaba/can…

网络异常,图片无法展示
|

启动失败,原因查看canal日志,是因为密码校验不能识别canal,所以需要修改canal.properties密码为二进制加密的。

网络异常,图片无法展示
|

再次启动消费成功,可以从日志中看到增量的sql

网络异常,图片无法展示
|

网络异常,图片无法展示
|

分享一个canal +springboot整合的小项目,git地址:

github.com/zfsndtl/can…

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
3天前
|
存储 SQL 关系型数据库
使用MySQL Workbench进行数据库备份
【9月更文挑战第13天】以下是使用MySQL Workbench进行数据库备份的步骤:启动软件后,通过“Database”菜单中的“管理连接”选项配置并选择要备份的数据库。随后,选择“数据导出”,确认导出的数据库及格式(推荐SQL格式),设置存储路径,点击“开始导出”。完成后,可在指定路径找到备份文件,建议定期备份并存储于安全位置。
43 11
|
17天前
|
canal 消息中间件 关系型数据库
Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
【9月更文挑战第1天】Canal作为一款高效、可靠的数据同步工具,凭借其基于MySQL binlog的增量同步机制,在数据同步领域展现了强大的应用价值
107 4
|
4天前
|
存储 SQL 关系型数据库
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
MySQL如何进行分库分表、数据迁移?从相关概念、使用场景、拆分方式、分表字段选择、数据一致性校验等角度阐述MySQL数据库的分库分表方案。
一篇文章搞懂MySQL的分库分表,从拆分场景、目标评估、拆分方案、不停机迁移、一致性补偿等方面详细阐述MySQL数据库的分库分表方案
|
1天前
|
NoSQL 关系型数据库 MySQL
微服务架构下的数据库选择:MySQL、PostgreSQL 还是 NoSQL?
在微服务架构中,数据库的选择至关重要。不同类型的数据库适用于不同的需求和场景。在本文章中,我们将深入探讨传统的关系型数据库(如 MySQL 和 PostgreSQL)与现代 NoSQL 数据库的优劣势,并分析在微服务架构下的最佳实践。
|
2天前
|
SQL 监控 关系型数据库
MySQL数据库中如何检查一条SQL语句是否被回滚
检查MySQL中的SQL语句是否被回滚需要综合使用日志分析、事务状态监控和事务控制语句。理解和应用这些工具和命令,可以有效地管理和验证数据库事务的执行情况,确保数据的一致性和系统的稳定性。此外,熟悉事务的ACID属性和正确设置事务隔离级别对于预防数据问题和解决事务冲突同样重要。
11 2
|
17天前
|
SQL Java OLAP
Hologres 入门:实时分析数据库的新选择
【9月更文第1天】在大数据和实时计算领域,数据仓库和分析型数据库的需求日益增长。随着业务对数据实时性要求的提高,传统的批处理架构已经难以满足现代应用的需求。阿里云推出的 Hologres 就是为了解决这个问题而生的一款实时分析数据库。本文将带你深入了解 Hologres 的基本概念、优势,并通过示例代码展示如何使用 Hologres 进行数据处理。
68 2
|
5天前
|
存储 缓存 关系型数据库
MySQL 视图:数据库中的灵活利器
视图是数据库中的虚拟表,由一个或多个表的数据经筛选、聚合等操作生成。它不实际存储数据,而是动态从基础表中获取。视图可简化数据访问、增强安全性、提供数据独立性、实现可重用性并提高性能,是管理数据库数据的有效工具。
|
5天前
|
SQL 关系型数据库 MySQL
MySQL技术安装配置、数据库与表的设计、数据操作解析
MySQL,作为最流行的关系型数据库管理系统之一,在WEB应用领域中占据着举足轻重的地位。本文将从MySQL的基本概念、安装配置、数据库与表的设计、数据操作解析,并通过具体的代码示例展示如何在实际项目中应用MySQL。
20 0
|
17天前
|
前端开发 C# 设计模式
“深度剖析WPF开发中的设计模式应用:以MVVM为核心,手把手教你重构代码结构,实现软件工程的最佳实践与高效协作”
【8月更文挑战第31天】设计模式是在软件工程中解决常见问题的成熟方案。在WPF开发中,合理应用如MVC、MVVM及工厂模式等能显著提升代码质量和可维护性。本文通过具体案例,详细解析了这些模式的实际应用,特别是MVVM模式如何通过分离UI逻辑与业务逻辑,实现视图与模型的松耦合,从而优化代码结构并提高开发效率。通过示例代码展示了从模型定义、视图模型管理到视图展示的全过程,帮助读者更好地理解并应用这些模式。
32 0
|
17天前
|
SQL 数据采集 关系型数据库

推荐镜像

更多