it编程 > 数据库 > Mysql

两个windows服务器使用canal实现mysql实时同步

6人参与 2025-03-08 Mysql

canal是什么?

canal是阿里基于java写的一个组件,他的作用是canal.deployer读取mysql数据的binlog日志,然后canal.adapter将其转换为对应的数据(数据的变化或者变化后的数据,跟配置有关),并且同步到相关中间件。本文实现两个windows服务器使用canal实现mysql主从复制实时同步。

mysql主备复制原理

mysql master将数据变更写入二进制日志(binarylog,其中记录叫做二进制日志事件binary log events,可以通过show binlog events进行查看)
mysql slave 将master的 binary log events拷贝到它的中继日志(relay log)
mysql slave 重放relay log中事件,将数据变更反映它自己的数据

canal 工作原理

canal 模拟 mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
mysql master 收到dump请求,开始推送binary log给slave (即canal )
canal 解析 binary log 对象(原始为 byte 流)

开启mysql的binlog

canal的原理是基于mysql binlog技术,所以这里一定需要开启mysql的binlog写入功能。

检查binlog功能是否有开启

-- off 表示功能未开启
show variables like 'log_bin';

binlog格式

binlog记录格式有两种,statement/row,其中statment记录sql格式,row格式记录每行的变更内容,控制格式的参数有三种,statement/mix/row,其中mix表示两者的混合

show variables like '%binlog_format%';

如何开启binlog功能

配置my.ini,在[mysqld] 下添加:

log-bin=mysql-bin
binlog_format=row
server-id=1

注意:mysql实例id,不能和canal的slaveid重复

binlog命令行参数详解:

重启mysql

-- 关闭服务
net stop mysql 
-- 开启服务
net start mysql 

重启后在d:\softinstall\mysql\mysql-5.7.38-winx64\data\目录下会产生mysql-bin.000001 和 mysql-bin.index 两个文件。

查看二进制文件

在dos命令行中,进入到mysql的安装目录下,即d:\softinstall\mysql\mysql-5.7.38-winx64,再进到bin/目录下,执行mysqlbinlog命令查看日志:

mysqlbinlog ../data/mysql-bin.000001

为了方便查看日志内容 可以导出到.sql文件

mysqlbinlog ../data/mysql-bin.000001 ->a.sql

可以通过show master status来查看当前写入的binlog的位点,其中:

可以通过show binary logs来查看binlog列表,表示本地保存的binlog及其大小(byte字节数)

在mysql里面添加以下的相关用户和权限

create user 'canal'@'%' identified by 'canal';
-- 注意权限问题,否则在后续的一些操作中会提示没有权限
grant all privileges on *.* to 'canal'@'%';
flush privileges;

下载安装canal服务

推荐canal1.1.5,只需要使用jdk1.8。canal1.1.6,该版本需要使用jdk11+

1)canal角色

2)下载地址

https://github.com/alibaba/canal/releases

 从canal官网下载canal.deployer和canal.deployer,在两台服务器上准备两个mysql数据库,其中一个作为源库,另一个为目标库,我准备的mysql源库服务器ip为:172.17.0.2,mysql服务端口为3306,目标库的服务器ip为172.17.0.4,mysql服务端口为3307。

canal.deployer

修改conf/example/instance.properties文件,如下部分:

即将canal.instance.master.address参数值改为172.17.0.2:3306

canal.adapter

修改conf/application.yml文件,如下部分:

即注释掉srcdatasources部分,修改driverclassname为com.mysql.cj.jdbc.driver,然后修改对应url,用户名和密码。

修改conf/rdb/mytest_user.yml文件,如下部分:

启动canal server和canal adapter

启动canal server,如下:bin/startup.bat

启动canal adapter,如下:bin/startup.bat

在172.17.0.2的数据库上执行插入语句,在172.17.0.4进行查询数据是否成功同步。

总结

到此这篇关于两个windows服务器使用canal实现mysql实时同步的文章就介绍到这了,更多相关canal实现mysql主从复制内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!

(0)
打赏 微信扫一扫 微信扫一扫

您想发表意见!!点此发布评论

推荐阅读

MySQL对字符串使用STR_TO_DATE()函数详解

03-09

mysql如何为大表新增字段或索引

03-09

mysqlbinlog查看日志[ERROR]unknown variable ‘default-character-set=utf8’

03-08

MySQL数据库优化与定期数据处理策略

03-09

MySQL读写分离的项目时间实践

03-06

MyCat 垂直分片和水平拆分的实现

03-06

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论