1、Binary log is not open

java.io.IOException: Received error packet: errno = 1236, sqlstate = HY000 errmsg = Binary log is not open
image.png
解:[mysqld]log-bin=mysql-bin # 开启 binlog
binlog-format=ROW # 选择 ROW 模式
server_id=1 # 配置 MySQL replaction 需要定义,不要和 canal 的 slaveId 重复

2、Could not find first log file name in binary log index file

java.io.IOException: Received error packet: errno = 1236, sqlstate = HY000 errmsg = Could not find first log file name in binary log index file
image.png

  1. 2021-06-17 15:11:58.995 [destination = yiCheForumCanal , address = /10.168.4.240: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
  2. 2021-06-17 15:11:58.995 [destination = yiCheForumCanal , address = /10.168.4.240:3306 , EventParser] WARN c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - prepare to find start position just last position
  3. {"identity":{"slaveId":-1,"sourceAddress":{"address":"10.168.4.240","port":3306}},"postion":{"gtid":"","included":false,"journalName":"binlog.001608","position":1017268964,"serverId":188,"timestamp":1620720622000}}
  4. 2021-06-17 15:11:59.054 [destination = yiCheForumCanal , address = /10.168.4.240:3306 , EventParser] WARN c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - ---> find start position successfully, EntryPosition[included=false,journalName=binlog.001608,position=1017268964,serverId=188,gtid=,timestamp=1620720622000] cost : 58ms , the next step is binlog dump
  5. 2021-06-17 15:11:59.161 [destination = yiCheForumCanal , address = /10.168.4.240:3306 , EventParser] ERROR c.a.o.canal.parse.inbound.mysql.dbsync.DirectLogFetcher - I/O error while reading from client socket
  6. java.io.IOException: Received error packet: errno = 1236, sqlstate = HY000 errmsg = Could not find first log file name in binary log index file
  7. at com.alibaba.otter.canal.parse.inbound.mysql.dbsync.DirectLogFetcher.fetch(DirectLogFetcher.java:102) ~[canal.parse-1.1.4.jar:na]
  8. at com.alibaba.otter.canal.parse.inbound.mysql.MysqlConnection.dump(MysqlConnection.java:235) [canal.parse-1.1.4.jar:na]
  9. at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3.run(AbstractEventParser.java:265) [canal.parse-1.1.4.jar:na]
  10. at java.lang.Thread.run(Thread.java:748) [na:1.8.0_292]
  11. 2021-06-17 15:11:59.162 [destination = yiCheForumCanal , address = /10.168.4.240:3306 , EventParser] ERROR c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - dump address /10.168.4.240:3306 has an error, retrying. caused by
  12. java.io.IOException: Received error packet: errno = 1236, sqlstate = HY000 errmsg = Could not find first log file name in binary log index file
  13. at com.alibaba.otter.canal.parse.inbound.mysql.dbsync.DirectLogFetcher.fetch(DirectLogFetcher.java:102) ~[canal.parse-1.1.4.jar:na]
  14. at com.alibaba.otter.canal.parse.inbound.mysql.MysqlConnection.dump(MysqlConnection.java:235) ~[canal.parse-1.1.4.jar:na]
  15. at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3.run(AbstractEventParser.java:265) ~[canal.parse-1.1.4.jar:na]
  16. at java.lang.Thread.run(Thread.java:748) [na:1.8.0_292]
  17. 2021-06-17 15:11:59.162 [destination = yiCheForumCanal , address = /10.168.4.240:3306 , EventParser] ERROR com.alibaba.otter.canal.common.alarm.LogAlarmHandler - destination:yiCheForumCanal[java.io.IOException: Received error packet: errno = 1236, sqlstate = HY000 errmsg = Could not find first log file name in binary log index file
  18. at com.alibaba.otter.canal.parse.inbound.mysql.dbsync.DirectLogFetcher.fetch(DirectLogFetcher.java:102)
  19. at com.alibaba.otter.canal.parse.inbound.mysql.MysqlConnection.dump(MysqlConnection.java:235)
  20. at com.alibaba.otter.canal.parse.inbound.AbstractEventParser$3.run(AbstractEventParser.java:265)
  21. at java.lang.Thread.run(Thread.java:748)
  22. ]

解:
{“identity”:{“slaveId”:-1,”sourceAddress”:{“address”:”10.168.4.240”,”port”:3306}},”postion”:{“gtid”:””,”included”:false,”journalName”:”binlog.001608”,”position”:1017268964,”serverId”:188,”timestamp”:1620720622000}}
无法从已知的binlog位点开始同步,登录数据库主库,运行show master status 查看主从同步情况,
image.png
比较发现,canal-server的同步位点时binlog.001608,因为canlnal是新机器部署、链接的新测试库,biglog未定发生变化,导致canal-server要同步的binlog文件不存在,最终导致同步异常。具体解决方案:

  • 关闭canal server、canal client
    • 如果canal server、canal client 没有关闭,是无法正常删除zookeepeer上对应的节点的,,所以要关闭所有的canal server、canal client节点
  • 删除zookeeper节点信息
    • 登录zookeeper所在服务器,使用zkCli.sh脚步进入到命令行
    • 使用ls命令查看canal正在运行的所有实例信息
      • $ ls /otter/canal/destinations
      • rmr /otter/canal/destinations/xxx
  • 修改canal server同步位点信息
    • 进入canal server 服务器的conf目录,修改对应实例instance.properties文件,将其中的canal.instance.master.journal.name和canal.instance.master.position修改为主库中的最新值。其中journal.name表示最新的binglog文件,master.position表示位点信息
    • 如果部署了两台Canal Server组成keepalive,这里可以只修改一台canal server ,因为当成功修改位点信息后,只要zookeeper中有位点信息,Canal Server就不会从本地配置文件读取
  • 重启canal server、canal client
    • 修改完后,直接启动Canal Server 再启动Canal Client,查看日志是否正常
    • 完成后,如果部署了keepalive,那么将其他的Canal Server和Canal Client都启动一下

      3、No route to host

      com.alibaba.otter.canal.protocol.exception.CanalClientException: java.net.NoRouteToHostException: No route to host
      image.png

解:在目的机器添加ip白名单
sudo iptables -I INPUT -m state —state NEW -m tcp -p tcp -s 192.168.87.76 -j ACCEPT