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

 更新时间:2025年03月08日 10:56:28   投稿:yin  
canal是阿里基于java写的一个组件,他的作用是canal.deployer读取mysql数据的binlog日志,然后canal.adapter将其转换为对应的数据(数据的变化或者变化后的数据,跟配置有关),并且同步到相关中间件,本文实现两个windows服务器使用canal实现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命令行参数详解:

  • log-bin [=file_name] 此参数表示启用binlog日志功能,并可以定制文件名称,默认为mysql-bin。存放目录是mysql安装目录的data文件夹下。
  • binlog_format 此参数配置binlog的日志格式,默认为mixed。
  • max_binlog_size此参数配置binlog的日志最大值,最大和默认值是1GB。
  • max_binlog_cache_size此参数表示binlog使用最大内存的数。
  • binlog-do-db=db_name 此参数表示只记录指定数据库的二进制日志。
  • binlog-ignore-db=db_name此参数表示不记录指定的数据库的二进制日志。
  • expire_logs_days 此参数表示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的位点,其中:

  • File表示下一个binlog的bytes内容即将写入的文件名
  • position表示下一个binlog的bytes内容写入到file中的位点的起点(byte字节数)
  • Binlog_Do_DB表示需要记录binlog的库名列表,也就是白名单
  • Binlog_Ignore_DB表示需要忽略的binlog的库名列表,也就是黑名单
  • Executed_Gtid_Set表示本库中已经执行完的全局事务的id集合

可以通过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角色

  • canal-admin:canal控制台,可以统一管理canal服务
  • canal-deployer:也是canal-server:canal的一个节点服务
  • canal-instance:canal-server中的一个处理实例,可以处理不同的业务逻辑
  • canal-adaper:canal适配器,canal 1.1.1之后,提供了适配器功能,可将canal server的数据直接输出到目的地,不需要用户编写客户端(个性化需求还需要用户编写客户端实现)

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主从复制内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • mysql 5.7.13 winx64安装配置教程

    mysql 5.7.13 winx64安装配置教程

    这篇文章主要为大家分享了windows下mysql 5.7.13winx64安装配置教程,总结在安装mysql5.7时遇到的坑,感兴趣的朋友可以参考一下
    2016-12-12
  • MySQL之初始化数据详解

    MySQL之初始化数据详解

    本文介绍了MySQL命令行的基本操作,包括列出数据库、创建数据库、使用数据库、查看表、删除数据库、退出MySQL等,还详细介绍了数据库表的结构和属性,以及如何创建和初始化测试数据
    2025-01-01
  • MySQL20个高性能架构设计原则(值得收藏)

    MySQL20个高性能架构设计原则(值得收藏)

    这篇文章主要介绍了MySQL20个高性能架构设计原则,帮助大家更好的理解和使用MySQL,感兴趣的朋友可以了解下
    2020-08-08
  • MYSQL  group by 有哪些注意事项

    MYSQL  group by 有哪些注意事项

    这篇文章主要介绍了MYSQL  group by 有哪些注意事项,比如我们不能在 group by 之后添加 where 查询语句,更多相关分享,需要的朋友可以参考下面文章内容
    2022-07-07
  • mysql5.6 主从复制同步详细配置(图文)

    mysql5.6 主从复制同步详细配置(图文)

    这篇文章主要介绍了mysql5.6 主从复制同步详细配置,但不是很详细推荐大家看下脚本之家以前的文章,需要的朋友可以参考下
    2016-04-04
  • Mysql-binlog的查看实践

    Mysql-binlog的查看实践

    MySQL的二进制日志可以说是MySQL最重要的日志了,它记录了所有的DDL和DML语句,本文主要介绍了Mysql-binlog的查看实践,具有一定的参考价值,感兴趣的可以了解一下
    2023-12-12
  • 2025版mysql8.0.41 winx64 手动安装详细教程

    2025版mysql8.0.41 winx64 手动安装详细教程

    本文指导Windows系统下MySQL安装配置,包含解压、设置环境变量、my.ini配置、初始化密码获取、服务安装与手动启动等步骤,旨在优化系统兼容性及开机速度,感兴趣的朋友一起看看吧
    2025-07-07
  • MYSQL ON UPDATE CURRENT_TIMESTAMP当字段值发生改变时才会更新记录的时间

    MYSQL ON UPDATE CURRENT_TIMESTAMP当字段值发生改变时才会更

    本文主要介绍了MYSQL ON UPDATE CURRENT_TIMESTAMP当字段值发生改变时才会更新记录的时间,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-01-01
  • MySQL库的操作方法超详细讲解(ubuntu系统)

    MySQL库的操作方法超详细讲解(ubuntu系统)

    MySQL是一个功能强大的数据库管理系统,正确管理和维护MySQL对于确保数据库的稳定性和性能至关重要,这篇文章主要介绍了ubuntu系统下MySQL库的操作方法,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-10-10
  • mysql分页的limit参数简单示例

    mysql分页的limit参数简单示例

    这篇文章主要给大家介绍了关于mysql分页的limit参数的相关资料,文中通过示例代码以及图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-12-12

最新评论