canal指定binlog定位正确姿势

现场回顾
1、canal重新构建后会清除meta.dat缓存binlog定位
2、canal构建后如果没有找到meta.dat会重新读取最后一个binglog的全部数据
3、mysql binlog的默认大小一般为1024M,一般情况下我们不会修改binlog大小,这样会导致每次重新构建canal服务端会花大量时间读取binlog,严重降低系统可用性。

实战需求
1、较少系统读取binlog时间,以尽量少的时间恢复生产环境
2、恢复生产环境后增量无异常

小试牛刀
目前修改canal定位有两个方案:
1、修改cannal服务端 instance.properties
1.1 查看mysql主库当前binlog定位以及获取时间戳
#查看主库binglog最新定位

show master status

10.10.10.202:6456 408960218

#获取当前时间戳

select UNIX_TIMESTAMP()

1656513284678

1.2 instance.properties增加binlog配置

canal.instance.master.address= 10.10.10.202:6456
canal.instance.master.journal.name= server-6-bin.000464
canal.instance.master.position= 408960218 
canal.instance.master.timestamp= 1656513284678

1.3、项目重新构建后会清除canal缓存的meta.dat,canal服务端找不到缓存的配置会直接拉取配置文件的配置信息。
注意:此配置可能会失效,造成canal拉取不到配置定位信息。

2、终极暴力方案,直接meta.dat定位信息
2.1 应该都知道canal服务端会缓存一个mata.dat的定位文件在服务端

-rw-r--r-- 1 root root 208896 Jul  7 23:24 h2.mv.db
-rwxrwxrwx 1 root root   2275 Jul  7 15:42 instance.properties
-rw-r--r-- 1 root root    358 Jul 18 10:01 meta.dat
[root@c137272672c4 test_clue_list]# pwd
/home/canal/conf/test_clue_list
[root@c137272672c4 test_clue_list]#

这个文件里面保存了canal读取binlog的定位信息:
{“clientDatas”:[{“clientIdentity”:{“clientId”:1001,“destination”:“test_clue_list”,“filter”:“”},“cursor”:{“identity”:{“slaveId”:-1,“sourceAddress”:{“address”:“10.10.10.202”,“port”:6456}},“postion”:{“gtid”:“”,“included”:false,“journalName”:“3ddc263eb6c7-bin.000158”,“position”:27612928,“serverId”:1,“timestamp”:1658109748000}}}],“destination”:“test_clue_list”}[root@c137272672c4 test_clue_list]#

2.2 项目构建后我们可以修改这个文件的配置信息,一般修改position里面几个选项即可:

 echo "{\"clientDatas\":[{\"clientIdentity\":{\"clientId\":1001,\"destination\":\"test_clue_list\",\"filter\":\"\"},\"cursor\":{\"identity\":{\"slaveId\":-1,\"sourceAddress\":{\"address\":\"10.10.10.202\",\"port\":6456}},\"postion\":{\"gtid\":\"\",\"included\":false,\"journalName\":\"3ddc263eb6c7-bin.000158\",\"position\":27612928,\"serverId\":1,\"timestamp\":1658109748000}}}],\"destination\":\"test_clue_list\"}"  >  meta.dat

2.3 修改完重启项目即可
在这里插入图片描述

2.4、如果需要同步的es索引很多修改这个文件是一个很费事的工作量,大家可以写一个shell脚本进行批量修改即可。如有需要看私信获取批量修改的shell脚本。

寄语:
canal读取binlog定位个人推荐第一种方案,如果第一种失效可以检查源码是否有问题;如果找不到具体原因可以直接用第二种方案强制修改。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小沈同学呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值