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 修改完重启项目即可
canal指定binlog定位正确姿势_第1张图片

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

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

你可能感兴趣的:(canal,数据库)