解决:多主mysql之间Canal循环同步问题

mysql 自带同步功能避免循环同步原理是通过每个mysql的my.conf 配置不同的server-id

同步与server-id习惯的步骤为:

假设mysql A 的server-id=1 , mysql B 的server-id=2

1. mysql A读取mysql的binlog中的sql和server-id

2.mysql B数据库写入sql前指定server-id

3.mysql B因为步骤2的写入产生的新的binlog,但是其中的server-id=1

4.mysql A读取 B的server-id=1发现与自己相等则抛弃

多主mysql之间Canal循环同步也使用相同方法:

假设mysql A 的server-id=1 , mysql B 的server-id=2,mysql C 的server-id=3

canal中配置数据源时同时增加mysql-server-id字段与mysqld的server-id的值相同

Canal监听 ABC的binlog

1.mysql A 变更

2.canal监听读取变更获得sql与server-id=1

3.canal监听倒新的binlog中的server-id 与当前mysql-server-id相同则为未同步过的数据继续同步

4. canal写入B,C库前分别设置statement.execute("SET @@global.server_id =  1" );

5. B,C写入sql并产生binglog

6. canal监听倒新的binlog中的server-id 与当前mysql-server-id不同则为已同步过的数据,抛弃

图解示例: 

以下展示过程相关的图片与代码

mysql 分析binlog

mysqlbinlog -v /data/mysql/binlog/mysql-bin.000006

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
实现MySQL实时同步MySQL可以借助canal工具来完成。 canal是阿里巴巴开源的一款基于MySQL增量日志解析,仅支持MySQL数据库的日志增量订阅和消费工具。通过订阅MySQL的binlog日志,canal可以获取到数据库的增量更新信息,并将这些信息解析后发送给其他应用进行消费。 为了实现MySQL实时同步MySQL,可以按照以下步骤进行操作: 1. 下载并安装canal工具。可以从canal的官方GitHub仓库下载最新版本的canal压缩包,并解压到指定目录。 2. 配置canal。在canal的配置文件中,需要设置MySQL的连接信息、要订阅的数据库和表信息等。 3. 启动canal。在命令行中切换到canal所在的目录,执行启动命令,让canal开始监听MySQL的binlog日志。 4. 消费binlog信息。通过编写Java等编程语言的消费端程序,连接到canal并接收解析后的binlog信息。在消费端程序中,可以根据业务需求将解析后的增量更新信息同步到另一个MySQL数据库中。 需要注意的是,由于canal只是将MySQL的增量日志解析成了结构化的数据,并没有提供具体同步MySQL的功能。因此,在步骤4中编写的消费端程序需要自行实现将解析后的binlog信息同步到另一个MySQL数据库的逻辑。 值得一提的是,canal还支持其他类型的消息队列,如Kafka等,通过消息队列可以实现更多应用场景下的实时数据同步。 总结而言,利用canal工具可以实现MySQL实时同步MySQL,通过订阅MySQL的binlog日志并解析后发送给消费端程序,再进行相应的同步操作。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值