1、canal 单机版可以参考下面的博客:
https://blog.csdn.net/Zsigner/article/details/108975390
2、CANAL HA模式
这篇文章主要是针对CANAL ADMIN【HA】集群模式的
报错信息:
2020-11-30 11:09:22.568 [destination = test , address = /127.0.0.1:3306 , EventParser] WARN c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - ---> begin to find start position, it will be long time for reset or first position
2020-11-30 11:09:22.568 [destination = test , address = /127.0.0.1:3306 , EventParser] WARN c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - prepare to find start position just last position
{"identity":{"slaveId":-1,"sourceAddress":{"address":"127.0.0.1","port":3306}},"postion":{"gtid":"","included":false,"journalName":"mysql-bin.286890","position":233291165,"serverId":68245,"timestamp":1606467679000}}
2020-11-30 11:09:22.569 [destination = test , address = /127.0.0.1:3306 , EventParser] WARN c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - ---> find start position successfully, EntryPosition[included=false,journalName=mysql-bin.286890,position=233291165,serverId=68245,gtid=,timestamp=1606467679000] cost : 1ms , the next step is binlog dump
2020-11-30 11:09:22.586 [destination = test , address = /127.0.0.1:3306 , EventParser] ERROR c.a.o.canal.parse.inbound.mysql.dbsync.DirectLogFetcher - I/O error while reading from client socket
java.io.IOException: Received error packet: errno = 1236, sqlstate = HY000 errmsg = Could not find first log file name in binary log index file
at com.alibaba.otter.canal.parse.inbound.mysql.dbsync.DirectLogFetcher.fetch(DirectLogFetcher.java:102) ~[canal.parse-1.1.5-SNAPSHOT.jar:na]
at com.alibaba.otter.canal.parse.inbound.mysql.MysqlConnection.dump(MysqlConnection.java:235) ~[canal.parse-1.1.5-SNAPSHOT.jar:na]
at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3.run(AbstractEventParser.java:265) ~[canal.parse-1.1.5-SNAPSHOT.jar:na]
at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]
2020-11-30 11:09:22.586 [destination = test , address = /127.0.0.1:3306 , EventParser] ERROR c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - dump address /127.0.0.1:3306 has an error, retrying. caused by
java.io.IOException: Received error packet: errno = 1236, sqlstate = HY000 errmsg = Could not find first log file name in binary log index file
at com.alibaba.otter.canal.parse.inbound.mysql.dbsync.DirectLogFetcher.fetch(DirectLogFetcher.java:102) ~[canal.parse-1.1.5-SNAPSHOT.jar:na]
at com.alibaba.otter.canal.parse.inbound.mysql.MysqlConnection.dump(MysqlConnection.java:235) ~[canal.parse-1.1.5-SNAPSHOT.jar:na]
at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3.run(AbstractEventParser.java:265) ~[canal.parse-1.1.5-SNAPSHOT.jar:na]
at java.base/java.lang.Thread.run(Thread.java:832) ~[na:na]
2020-11-30 11:09:22.587 [destination = test , address = /127.0.0.1:3306 , EventParser] ERROR com.alibaba.otter.canal.common.alarm.LogAlarmHandler - destination:test[java.io.IOException: Received error packet: errno = 1236, sqlstate = HY000 errmsg = Could not find first log file name in binary log index file
at com.alibaba.otter.canal.parse.inbound.mysql.dbsync.DirectLogFetcher.fetch(DirectLogFetcher.java:102)
at com.alibaba.otter.canal.parse.inbound.mysql.MysqlConnection.dump(MysqlConnection.java:235)
at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3.run(AbstractEventParser.java:265)
at java.base/java.lang.Thread.run(Thread.java:832)
]
3、解决思路:
集群模式的binlog postition是交给zookeeper管理的,找不到的时候说明要么是binlog被删了,要么是程序在zk读取的position超前了,直接登陆zookeeper删除 binlog position
3.1、登陆zookeeper
进入zk bin目录
cd /usr/local/apache-zookeeper-3.6.2-bin/bin
3.2、登陆zk
./zkCli.sh -server 10.0.0.1:2181,10.0.0.81:2181,10.0.0.21:2181
3.3、查看所有目录,可以看到canal目录下由很多子目录,找到我们需要修改的canal instance,eg:instance=test
ls -R /
3.4、删除canal下destinations的目录
deleteall /otter/canal/destinations/test
3.5、检查是否删除,目录已不存在,删除完成
ls /otter/canal/destinations/test
4、重新修改instance.properties 并且启动instance 发现完成 BINGO!!