Canal 同步异常分析:Could not find first log file name in binary log index file
文章首发于【博客园-陈树义】,点击跳转到原文Canal同步异常分析:Could not find first log file name in binary log index file。
公司搜索相关的业务系统采用了ElasticSearch + Canal实现了实时搜索(详情可参考文章:ElasticSearch + Canal 开发千万级的实时搜索系统)。
最近在查看线上Canal Server日志的时候发现了异常,这直接导致了其中一个数据库停止了数据同步。

从异常信息可以看到是实例为dbxxxx225_photo的实例发生了同步异常,对应的数据库机器为x.x.x.225,异常关键信息为:Could not find first log file name in binary log index file。
仔细排查问题日志,还发现有另外一个异常:

这个异常大致意思是无法从该binlog位点(mysql-bin.000231)开始同步。于是我们登录对应的数据库主库,运行show master status\G命令查看主从同步情况:
File: mysql-bin.000298
Position: 323871973
Binlog_Do_DB:
Binlog_Ignore_DB: mysql,test,information_schema,performance_schema,sys
Executed_Gtid_Set:
1 row in set (0.01 sec)
从上面的运行结果可以看到最新的文件是mysql-bin.000298,而Canal Server还在同步位点mysql-bin.000231。
我们知道MySQL保存的binlog文件是有限制的,当超过一定限制时,最早的文件会被删除。因此可以初步确定是因为数据库主从同步出现问题,导致Canal Server服务器所同步的binlog文件不存在,最终导致同步异常。
确定了问题所在,接下来就是如何解决问题了。因为binlog文件已经被删除了,所以在binlog位于231-298中间的数据是无法找回的,这导致了部分数据的丢失,但好在这部分数据并不是非常关键的数据,因此一部分的数据丢失可以承受。
因此我的解决方案是直接从最新的binlog位点进行同步。我们知道Canal Server和Canal Client之间的位点同步信息是存储在zookeeper节点中的,因此我们接下来要删除zookeeper上的节点信息,并重启相关服务。
关闭Canal Server、Canal Client
上面是系统简单的业务架构图。如果Canal Server、Canal Client没有关闭,是无法正常删除zookeeper上相应的节点的,所以我们要关闭所有的Canal Server和Canal Client。我一开始在删除的时候,只关闭了Canal Server,没有关闭Canal Client,后来在删除的时候发现无论如何都删除不了其中一个节点。最后将Canal Client也关闭之后,节点成功删除掉了。
所以,第一步就是要关闭所有的Canal Server和Canal Client节点,如果你部署了keepalive,另一台机器的也要关闭。
删除zookeeper节点信息
登录zookeeper所在服务器,使用zkCli.sh脚本进入到命令行。
使用ls命令查看canal正在运行的所有实例信息:
$ls /otter/canal/destinations
db10xxxx225003_photo db10xxxx225003_user ....
之后直接使用rmr节点删除该实例节点下的所有子节点:
rmr /otter/canal/destinations/db10xxxx225003_photo
修改Canal Server同步位点信息
进入Canal Server服务器的conf目录,修改对应实例的instance.properties文件,将其中的canal.instance.master.journal.name和canal.instance.master.position修改为主库中最新的值。其中journal.name表示最新的binlog文件名,master.position表示位点信息。我这里对应的就是下面:
File: mysql-bin.000298 //对应canal.instance.master.journal.name
Position: 323871973 //对应canal.instance.master.position
如果你部署了两台Canal Server组成keepalive,这里可以只修改其中一台Canal Server,因为当成功修改位点信息后,只要zookeeper中有位点信息,Canal Server就不会从本地配置文件读取。
修改完后,直接启动Canal Server,再启动Canal Client,这时候查看Kafka队列是否有增加对应的消息。一般情况下,都没有什么问题。
完成后,如果部署了keepalive,那么将其他的Canal Server和Canal Client都启动一下就可以了。
参考资料
- [1].CSDN.Could not find first log file name in binary log index file.[DB/OL].2017-10-09
文章首发于【博客园-陈树义】,点击跳转到原文Canal同步异常分析:Could not find first log file name in binary log index file。
Canal 同步异常分析:Could not find first log file name in binary log index file的更多相关文章
- canal同步异常:当表结构变化时,同步失败
场景 canal 同步Mysql一段时间后突然失败,报如如下错误: 2021-08-06 16:16:51.732 [MultiStageCoprocessor-Parser-Twt_instance ...
- Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'系列三:重置主从同步
1:停止slave服务器的主从同步 stop slave; 2:对Master数据库加锁 flush tables with read lock; 3:备份Master上的数据 mysqldump - ...
- 主从同步遇到 Got fatal error 1236 from master when reading data from binary log: 'Could not find first log file name in binary log index file'时怎么解决
首先遇到这个是因为binlog位置索引处的问题,不要reset slave: reset slave会将主从同步的文件以及位置恢复到初始状态,一开始没有数据还好,有数据的话,相当于重新开始同步,可能会 ...
- 【Canal源码分析】整体架构
本文详解canal的整体架构. 一.整体架构 说明: server代表一个canal运行实例,对应于一个jvm instance对应于一个数据队列 (1个server对应1..n个instance) ...
- 【转】Java ConcurrentModificationException 异常分析与解决方案--还不错
原文网址:http://www.2cto.com/kf/201403/286536.html 一.单线程 1. 异常情况举例 只要抛出出现异常,可以肯定的是代码一定有错误的地方.先来看看都有哪些情况会 ...
- LCD显示异常分析——撕裂(tear effect)【转】
转自:LCD显示异常分析--撕裂(tear effect) 概述 在上一篇<LCD显示异常分析--开机闪现花屏>中,我们一起分析了开机花屏的问题,在这一篇中,我将对LCD撕裂(tear e ...
- group_concat函数导致的主从同步异常
group_concat函数导致的主从同步异常的问题总结 今天在处理一个group_concat函数导致的主从异常的问题,排查过程比较简单,不过第一次遇到这个问题记录一下排查的思路,后面如果再遇到其他 ...
- MySQL主从同步异常问题解决Client requested master to start replication from position > file size
MySQL主从同步异常问题解决Client requested master to start replication from position > file size 一.问题描述 MySQ ...
- mysql主从同步异常原因及恢复
mysql主从同步异常原因及恢复 前言 mysql数据库做主从复制,不仅可以为数据库的数据做实时备份,保证数据的完整性,还能做为读写分离,提升数据库的整体性能.但是,mysql主从复制经常会因为某些原 ...
随机推荐
- 初学者入门web前端:C#基础知识:函数
入行前端对函数的掌握程度有可能直接影响以后工作的效率,使用函数可以高效的编写编码,节省时间,所以我整理了C#中最基础的函数知识点,虽然我在学习中 遇到很多问题,但是只要能够解决这些问题,都是好的. 一 ...
- hibernate 事务理解
简介: Hibernate本身并不具备事务管理能力 .在事务管理层, Hibernate将其委托给底层的JDBC或者JTA ,以实现事务管理和调度功能. Hibernate的默认事务处理机制基于JDB ...
- 新CCIE笔记-路由器的配置
CCIE重修笔记之路由器基本配置与最简单的路由. 路由器与交换机的基本配置命令 全局配置模式下有多种子模式 (华为可以跳跃切换模式) 思科命令行技巧 Tab键补全,也可以直接保留缩写 问号'?'类似l ...
- 转:【Java并发编程】之九:死锁(含代码)
转载请注明出处:http://blog.csdn.net/ns_code/article/details/17200937 当线程需要同时持有多个锁时,有可能产生死锁.考虑如下情形: 线程A当前持有互 ...
- 1~N任意三个数最大的最小公倍数(Java版)
最大最小公倍数 如题 话不多说,直接上代码 public class MaxCommonMultiple{ public static void main(String[] args) { Scann ...
- 微信小程序中的微信支付js代码和流程详解
微信支付流程 步骤 (一)获取用户的信息 (二)统一下单(返回的prepay_id用于第(三)步的请求参数) (三)发起支付请求 操作(这边假设你已经获得了用户的openId) (一).获取用户ope ...
- 第二次项目冲刺(Beta阶段)--第七天
一.站立式会议照片 二.项目燃尽图 三.项目进展 codingnet:https://git.coding.net/tuoxie/chachong-beta.git 1.对项目进行全面的测试 2.继续 ...
- Java中继承与多态
Java类的继承继承的语法结构: [修饰符列表] class 子类名 extends 父类名{ 类体; }子类就是当前这个类,父类就是我们要复用的那个类java中只支持单继承 ...
- 201521123035《Java程序设计》第四周学习总结
本周学习总结 1.1 尝试使用思维导图总结有关继承的知识点. 1.2 使用常规方法总结其他上课内容. 本周还讲了注释与类设计.老师用例子向我们展示实际生活中一个类里面包含了哪些属性,并由此联想到如果自 ...
- JSP学习(一)之中文乱码问题的解决
一.响应中的乱码 我们所看到的页面,是由服务器把内容放入响应(response)中,然后发送给浏览器的.如果响应中的数据无法被正常解析,就会出现中文乱码.为什么英文不存在乱码问题?因为无论是ISO-8 ...