6人参与 • 2025-03-08 • Mysql
canal是阿里基于java写的一个组件,他的作用是canal.deployer读取mysql数据的binlog日志,然后canal.adapter将其转换为对应的数据(数据的变化或者变化后的数据,跟配置有关),并且同步到相关中间件。本文实现两个windows服务器使用canal实现mysql主从复制实时同步。
mysql master将数据变更写入二进制日志(binarylog,其中记录叫做二进制日志事件binary log events,可以通过show binlog events进行查看)
mysql slave 将master的 binary log events拷贝到它的中继日志(relay log)
mysql slave 重放relay log中事件,将数据变更反映它自己的数据
canal 模拟 mysql slave的交互协议,伪装自己为mysql slave,向mysql master发送dump协议
mysql master 收到dump请求,开始推送binary log给slave (即canal )
canal 解析 binary log 对象(原始为 byte 流)
canal的原理是基于mysql binlog技术,所以这里一定需要开启mysql的binlog写入功能。
-- off 表示功能未开启 show variables like 'log_bin';
binlog记录格式有两种,statement/row,其中statment记录sql格式,row格式记录每行的变更内容,控制格式的参数有三种,statement/mix/row,其中mix表示两者的混合
show variables like '%binlog_format%';
配置my.ini,在[mysqld] 下添加:
log-bin=mysql-bin binlog_format=row server-id=1
注意:mysql实例id,不能和canal的slaveid重复
binlog命令行参数详解:
-- 关闭服务 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字节数)
create user 'canal'@'%' identified by 'canal'; -- 注意权限问题,否则在后续的一些操作中会提示没有权限 grant all privileges on *.* to 'canal'@'%'; flush privileges;
推荐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。
修改conf/example/instance.properties文件,如下部分:
即将canal.instance.master.address参数值改为172.17.0.2:3306
修改conf/application.yml文件,如下部分:
即注释掉srcdatasources部分,修改driverclassname为com.mysql.cj.jdbc.driver,然后修改对应url,用户名和密码。
修改conf/rdb/mytest_user.yml文件,如下部分:
启动canal server,如下:bin/startup.bat
启动canal adapter,如下:bin/startup.bat
在172.17.0.2的数据库上执行插入语句,在172.17.0.4进行查询数据是否成功同步。
到此这篇关于两个windows服务器使用canal实现mysql实时同步的文章就介绍到这了,更多相关canal实现mysql主从复制内容请搜索代码网以前的文章或继续浏览下面的相关文章希望大家以后多多支持代码网!
您想发表意见!!点此发布评论
版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。
发表评论