前言
在日常的工作中,数据同步可以说是每个公司都会遇到的业务场景,但是大多数中小型企业并没有很好的数据同步方案,基本都是用代码逻辑来实现的,不仅有代码入侵,而且效率也不好,所以如何能实现数据的增量同步成了很多公司的痛点。今天介绍一个阿里的开源框架canal,他可以很好的同步增量数据到其它的存储应用。
官网地址:https://github.com/alibaba/canal
canal [kə'næl],译意为水道/管道/沟渠,主要用途是基于 MySQL 数据库增量日志解析,提供增量数据订阅和消费。

数据库镜像
数据库实时备份
索引构建和实时维护
业务cache刷新
带业务逻辑的增量数据处理
1. MySQL服务器
--创建用户 用户名canal 密码canalCREATE USER canal IDENTIFIED BY 'canal';--授权 *.*表示所有库GRANT SELECT, REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'canal'@'%';--刷新使立即生效FLUSH PRIVILEGES;
select * from mysql.user where user='canal' \G

可以看到授权成功,一定要确保授权成功,不然canal没有权限去读mysql的数据。
下一步在MySQL配置文件/etc/my.cnf设置如下信息(不同版本不同环境的MySQL配置文件名称和路径略有差异,需自己找一下):
[mysqld]# 打开binloglog-bin=mysql-bin# 选择ROW(行)模式binlog-format=ROW# 配置MySQL replaction需要定义,不要和canal的slaveId重复server_id=1
改了配置文件之后,重启mysql,使用命令查看是否打开binlog模式:
--是否打开binlog模式show variables like 'log_bin';--查看binlog日志文件列表show binary logs;--查看当前正在写入的binlog文件show master status;



## mysql serverId , v1.0.26+ will autoGen# v1.0.26版本后会自动生成slaveId,所以可以不用配置# canal.instance.mysql.slaveId=0# 这里需要配一下数据库地址,其它信息可以不配# 数据库地址canal.instance.master.address=127.0.0.1:3306# binlog日志名称canal.instance.master.journal.name=# mysql主库链接时起始的binlog偏移量canal.instance.master.position=# mysql主库链接时起始的binlog的时间戳canal.instance.master.timestamp=canal.instance.master.gtid=# 配置canal的用户名密码canal.instance.dbUsername=canalcanal.instance.dbPassword=canal# table regex# .*\\..*表示监听所有表 也可以写具体的表名,用,隔开canal.instance.filter.regex=.*\\..*# table black regex# 数据解析表的黑名单,多个表用,隔开canal.instance.filter.black.regex=mysql\\.slave_.*
配置完成之后进入bin目录找到startup.sh启动:


<dependency><groupId>com.alibaba.otter</groupId><artifactId>canal.client</artifactId><version>1.1.0</version></dependency>

在main方法中修改一下连接信息,然后右键启动,可以从控制台中看到类似消息:

表明Java客户端已经连接到了canal,我们接下来做个测试:
a. 创建一张user表:
CREATE TABLE `user_test` (`id` int NOT NULL,`name` varchar(20) DEFAULT NULL COMMENT '名字',`age` int DEFAULT '0' COMMENT '年龄',PRIMARY KEY (`id`)) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COMMENT='用户表';

b. 新增一条数据,查看控制台打印的信息:
insert into user(id, name, age) values('1', 'zhangsan', '20');

c. 修改这条数据,查看控制台打印的信息:


文章转载自Java摆渡人,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




