故障分析 | 手动 rm 掉 binlog 导致主从报错

Nextcloud+Docker+Ubuntu生产部署实战:避坑指南 私有云协作平台Nextcloud并非简单安装即可运行,其稳定依赖Docker容器编排、Ubuntu系统调优、OnlyOffice深度集成与Rclone存储扩展四大技术支柱。原理上,Docker提供服务隔离与声明式运维,Ubuntu内核与DNS机制直接影响容器网络连通性,OnlyOffice需JWT认证与WebSocket长连接保障实时编辑,Rclone则通过FUSE虚拟化实现对象存储无缝接入。技术价值在于构建高可用、可伸缩、数据主权可控的轻量级私有云基座。典型场景包括中小团队文件中心搭建、摄影工作室NAS协 阅读详情

作者:陈伟

爱可生数据库工程师,负责MySQL日常维护及故障处理。

本文来源:原创投稿

*爱可生开源社区出品,原创内容未经授权不得随意使用,转载请联系小编并注明来源。


1.故障描述

前一段时间客户反馈复制报错 1236 ,根据报错提示该报错为从库读取到了主库不存在的 binlog 日志,导致复制中断,报错截图如下,需要帮忙分析为什么会报错 Could not open log file 原因。

2.故障分析

说明:考虑客户信息敏感性,以下分析过程均在测试环境模拟,数据库版本 5.7.31 ,GTID 启用。

2.1.先登录从库查看报错信息

发现从库的 io 线程断了,并报错:Got fatal error 1236 from master when reading data from binary log: ‘Could not open log file’ ,从字面意思不难理解,无法从主库获取到 binlog 日志,GTID 停止在 828415 ,检查从库 error 日志报错如下:

根据从库报错信息,下一步我们去主库查看主库的 binlog 信息和 error 日志,看主库 binlog 是否有丢失的情况。

2.2.查看主库 binlog 信息,以及 error 日志

登录主库检查 binlog 日志列表以及 index 索引文件,发现主库的 binlog 是连续的没有问题,但在查看 mysql-bin.index 文件的时候发现有记录两个 mysql-bin.000006 ,但是实际只有一个 mysql-bin.000006 文件,先记着这个奇怪的现象。

再去看一眼主库的 error 日志,内容如下,和从库 error 日志都指向同一个 binlog 。

到这我们可以确认问题出在 mysql-bin.000006 这个 binlog 日志上,但是从上面的图中可以发现主库的 binlog 日志是有 mysql-bin.000006 这个日志的,所以我们现在解析一下指向的 mysql-bin.000006 日志以及前一个日志 mysql-bin.000005 。

通过解析 mysql-bin.000005 可以看到最后一个事务 gtid 为:'c582a82e-b985-11ec-adf5-02000aba3e89:828415’为上面从库停止 gtid 的位置。

继续解析 mysql-bin.000006 查看其第一个事务的 gtid 为:‘c582a82e-b985-11ec-adf5-02000aba3e89:855706’ 。

mysql-bin.000006 第一个 GTID 事务为 855706 ,与 binlog.000005 文件相差了两万多个的 GTID 事务,与上一个 binlog.000005 并不连续,说明的确存在了事务丢失,现在的问题就是为什么 mysql-bin.index 文件会记录着有两个相同 mysql-bin.000006 ,以及客户的故障场景是如何触发的。

3.故障复现

3.1.复现 index 索引文件记录相同 binlog 文件名

首先根据故障分析的结果,我们先复现出 binlog 索引文件中 binlog 文件名重复场景。

第一步登录主库所在的机器,在复制状态正常下,把主库正在用的 binlog 日志 rm 手动删除。

第二步进入主库执行 flush logs 刷新日志,这时 binlog 会重新生成刚刚删除的 binlog 文件,此时观察主库的 binlog 日志是连续的,index 索引文件里面出现了两个刚刚 rm 手动删除的 binlog 日志信息,即 index 文件记录着有两个相同文件,与客户场景一致。

所以 binlog 索引文件里有两个 binlog.000006 ,通过上面测试可以发现,是因为当正在用的 binlog 文件被手动rm掉时,binlog 文件计数器是不会受到影响,当在 binlog 文件刷新后(重启、flush log 、binlog 文件写满等),binlog 文件计数器会根据当前最大 binlog 文件+1。正如上面场景第一个 binlog.000006 文件是正常记录 binlog.index 中,此时再将 binlog.000006 文件 rm 掉后,最大的为 binlog 日志为 000005 ,这时主库 flush logs ,还会按顺序在最大 binlog.00000 5生成第二个 binlog.000006 ,binlog.index 中也出现两个 binlog.000006 。但主库实际已经丢失一个 binlog.000006 ,现有的 binlog.000006 和上一个 binlog.000005 的 gtid 也不连续,只是文件名仍连续。

3.2.复现客户场景 Got fatal error 1236 from master when reading data from binary log: ‘Could not open log file’

在 3.1 的测试过程中发现客户的故障并不是一定会出现,还有其他现象,我们先来复现出客户场景。

首先需要主从有一定的延迟,如下从库获取到主库 binlog.000006 。

此时将主库正在用的 binlog.000007 手动 rm 掉,这时虽然 binlog.000007 已经被删除,但仍在后台被主库占用,新的 binlog.000007 这时也还没有刷新生成,但 index 里面是有记录 binlog.000007 的。

这时当从库读取完 binlog.000006 并继续获取 binlog 索引文件里记录的 binlog.000007 时,由于此文件已经被删除且主库没有生成新的 binlog.000007 ,从而复制报错。

主从复制故障后,主库这时其实还在使用着已经删除的 binlog 文件,直到触发flush logs ,这时mysql-bin.index就会出现3.1场景。至此客户复制故障场景已完全复现出来。

3.3其他场景

在复现的过程中发现还会出现其他不同的场景,由于篇幅较长便简单描述不再详细展开,有兴趣的同学可以自己进行测试。

场景一:
主从不报错,从库丢 gtid ,这种场景和上面客户复制故障的场景一样都需要有一定的主从延迟,不同点在于当从库已经读取完binlog.xxx并继续获取binlog索引文件里记录的被rm删除掉binlog.yyy文件时,这时主库已经触发flush logs生成了新的binlog.yyy,此时从库io线程读取到了新的binlog.yyy。这种情况下,从库gtid是不连续的,主从不一致。

场景二:
在主从没有延迟或者延迟较低的情况下,从库已经读取到主库正在用的binlog.yyy。这时将主库正在用的binlog.yyy删除,由于被删除的binlog.yyy仍在后台被占用着,所以在从库可以看到复制状态还是正常的。直到主库binlog文件在重新刷新(flush log、binlog文件写满等)生成新的binlog.yyy后,从库的gtid这时就不在更新,从库很快报错1236。

为什么在生成新的binlog.yyy后就报错1236是因为主库binlog日志在重新flush生成新的binlog.yyy后,新的binlog.yyy事件是从4开始的,而此时从库已经应用到旧binlog.yyy事件的位置远超4,所以导致从库无法从新的binlog.yyy读取binlog日志从而报错。

4.建议

通过上面的测试可以发现人为rm掉正在用的binlog基本都会导致主从报错或主从不一致,而一旦出现这种情况除了重做从库外一般是没有其他比较好的方法,这样是不利于数据库维护,所以建议:

  1. 避免对binlog文件做压缩删除等直接操作,可以通过调整参数修改binlog清理策略.
  2. 需要手工删除binlog时,可以进入MySQL通过purge命令去删除。
记一次MySQL启动报错:Could not open file ‘/var/log/mysqld.log‘ for error logging: Permission denied 的排查与解决 报错:Could not open file ‘/var/log/mysqld.log’ for error logging: Permis。 阅读详情

相关推荐

Linux常见问题

1.shell脚本不执行 问题:某天研发某同事找我说帮他看看他写的shell脚本,死活不执行,报错。我看了下,脚本很简单,也没有常规性的错误,报“:badinterpreter:Nosuchfileordirectory”错。 看这错,我就问他是不是在windows下编写的脚本,然后在上传到linux服务器的……果然。 原因:在DOS/windows里,文本文件的换行符为rn,而在nix系统里则为n,所以DOS/Windows里编辑过的文本文件到了nix里,每一行都多了个^M。 解决: 1)重新在linux

qq_40907977的博客 344

mysql could not open log file_数据库主从报Got fatal error 1236 from master when reading data from binary l...

数据库主从不同步时报“Got fatal error 1236 from master when reading data from binary log: 'Could not open log file'”解决方法。查看问题点:mysql> show slave status\G*************************** 1. row ********************...

weixin_42499067的博客 1844

Xilinx PL实现DP TX视频传输的关键配置与实战解析

本文详细解析了在Xilinx ZCU106开发板上,利用PL(可编程逻辑)实现DP TX(DisplayPort发送)视频传输的关键配置与实战流程。内容涵盖从硬件平台搭建、DP TX IP核参数(如链路速率、通道数、视频时序)的详细配置,到软件驱动初始化、中断处理及链路训练的全过程,并提供了屏幕闪烁、颜色异常等常见问题的避坑指南与调试技巧,旨在帮助开发者高效实现稳定的4K视频输出。

weixin_29165465的博客 350

mysql 5.7.22 winx64_windows下mysql-5.7.22-winx64突然启动不了,报错Could not open log file

windows下mysql-5.7.22-winx64突然启动不了,感觉启动几秒钟后就自己关闭了,看了下启动日志:2019-08-25T10:57:08.389404Z 0 [Warning] option 'wait_timeout': unsigned value 31536000 adjusted to 21474832019-08-25T10:57:08.389459Z 0 [Warnin...

weixin_39986973的博客 706

别再傻傻分不清!直流有刷、无刷、步进电机,3分钟教你根据项目需求选对电机

本文深入解析直流有刷电机、无刷电机和步进电机的核心差异与应用场景,提供电机选型的黄金法则。通过性能参数对比、成本分析及典型应用案例,帮助工程师根据项目需求精准选择电机类型,避免常见选型误区。特别适合机器人、3D打印等领域的开发者参考。

weixin_29183637的博客 339

LiteOS | 基于LiteOS的智慧农业案例实验分享

分享一个基于小熊派+LiteOS+华为云的案例实验(智慧农业)。 实验框图 相关模块简介 1、STM32L431RCT6 2、LiteOS LiteOS是华为开发的轻量级实时操作系统: LiteOS源码GitHub仓库链接: https://github.com/LiteOS/LiteOS 其源码一级目录结构如下: 其内核包括任务管理、内存管理、时间管理、通信机制、中断管理、队列管...

嵌入式大杂烩 5990

关于mysql could not open logs 的解决方法

关于mysql could not open logs 的解决方法

Gavin 3750

WIFI信号状态信息 CSI 特征提取篇之活动片段提取(五)

本环节是特征提取环节,起承上启下的作用:对上,应着数据处理完毕的信号,但是还不能直接进行分析,因为此时信号片段过长,对于活动识别而言,存在非许多目标片段(例如失败不规范的动作、休息间歇等);对下,具体采取何种活动片段提取策略,需要配合后续采取的活动识别算法进行(深度学习/机器学习,CNN/RNN/LSTM等等),不同的算法适配不同的数据形式,例如CNN一般用于识图,不需要关注时间顺序,LSTM则要求保留时间关系等等,所以本博客后续仅介绍几种分类思路。

Silver_777的博客 4537

MySQL 找不到binlog文件启动失败的解决办法

本文主要说明了由于二进制日志文件问题造成的MySQL启动不了的解决办法

每一点星光,都是一个来自其他世界的问候 7041

高通8155源码下载与Android源码编译

一.下载代码 高通下载源码位置: Qualcomm CreatePoint 注册账号,然后登入 可以先选择edit -> infotainment -> sa8155 -> favorites, 点击View TOC就可以过滤出sa8155所有的信息目录.如下图 拉取代码链接在ChipCode中,点击进去可以看到所有的基线版本,选择你需要下载的版本点进去,如sa8155p-la-1-0_ap_standard_oem,把高通专有代码和开源代码都下载到本机. 1..

Johnny2004的专栏 7675

基于高斯两步移动搜寻法(2SFCA)的城市绿地可达性分析

第二步,对于每一个街道i,给定空间距离阈值d0,便形成另一个空间作用域,同样对于落在空间作用域内的每块绿地l的供给比率(Rl)利用高斯方程赋以权重,然后对这些加权后的供给比率(Rl)进行加和,便得到每个街道i的绿地可达性Ai。图3与图4是高斯两步移动搜索法的示例。在图3中,以d0为阈值,有1、2、3 三个街道中心点落在了绿地a的空间作用域内。同样在图4中,以d0为阈值,有a、c两个绿地中心点落在了街道2的空间作用域内,根据公式(3),对a、c高斯方程加权后的供需比率进行累加,便得到了街道2 的绿地可达性。

2301_77310370的博客 2404

滴滴校招运维笔试题复盘:从生产环境搭建到故障排查

系统运维工程师的核心职责,是在复杂业务场景下保障生产环境的稳定与高可用。故障排查能力与自动化思维,决定了运维工作的效率与质量。从Linux性能分析到负载均衡选型,从MySQL主从复制到缓存雪崩治理,运维知识体系需要覆盖基础架构与中间件。通过理解监控指标、容量规划和应急预案,运维人员能够在系统从零搭建过程中建立可靠的防线。本文基于滴滴校招运维笔试题的考察逻辑,梳理生产环境搭建与维护的关键路径。

weixin_34060741的博客 419

S7-200 SMART PLC 数字量阀门控制功能块(FB)汇总

S7-200 SMART PLC功能块的各种写法可以查看专栏的其它文章,链接地址如下:S7-200 SMART PLC 子程序功能块(阀门控制)_RXXW_Dor的博客-优快云博客_plc控制阀门开关程序由于S7-200 SMARTPLC的子程序种种功能、容量限制,有时想实现多次调用的子程序可能并不是太容易,这篇博客还是给出一些推荐写法,供大家参看。

RXXW_Dor的博客 3999

mysql could not open log file_Apache启动错误Permission denied: httpd: could not open error log file解决方法...

一、系统环境CentOS 6.3 X64yum 安装的 apache版本:httpd-2.2.15-30.el6.centos.x86_64二、问题描述新增加虚拟主机站点,启动不了,查看日志,显示:启动 httpd:(13)Permission denied: httpd: could not open error log file /home/wwwroot/jb51.net/logs/erro...

weixin_35758982的博客 672

【图像超分】论文复现:Pytorch实现ESPCN

论文精读:由于ESPCN没有公布源码,我们选择github上一个高star的项目来复现。准备数据集,以及数据预处理搭建网络模型设置参数并训练测试训练好的模型用训练好的模型测试自己的数据本文我们使用pycharm链接服务器训练。

主要更新底层视觉(去噪、超分等)相关的科研内容,形式为【论文精读】+【论文复现】 1万+

efm32 入门.pdf

本PDF共计22页,介绍的是操作驱动API,下载与否自己斟酌。

MySQL Binlog(主从同步/数据恢复) 及 mysqldump:

MySQL主从同步、数据恢复 mysqldump数据备份

梦~' 7951

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

nginx: [alert] could not open error log file: open() “/usr/local/nginx/logs/error.log“ failed 问题解决

nginx的运行报错nginx: [alert] could not open error log file: open() "/usr/local/nginx/logs/error.log" failed (2: No such file or directory) 2021/08/19 14:22:51 [emerg] 8956#0: mkdir() "/usr/local/nginx/client_body_temp" failed (2: No such file or directory)

u011285281的博客 7094

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ERROR Could not open file ‘***/log/mysql/error.log‘ for error logging: Permission denied

centos系统中MySQL无法启动的问题,ERROR Could not open file '***/log/mysql/error.log' for error logging: Permission denied

qq_58832911的博客 8210

MySQL主从关系slave数据库没有生成binlog的解决办法一则

和DBA配合做MySQL故障转移(failover)的时候,发现slave数据库没有相应生成binlog, 在slave数据库的配置文件里增加配置:log_slave_updates=1 此参数的含义是:slave数据库将二进制日志写入自己的binlog中。

哥是技术人 2667

记一次binlog缺失下mysql主从的恢复方案

使用mysql8.+版本新增的数据克隆插件,MySQL 8.0.17引入了Clone插件,可以进行本地或从远程MySQL服务器实例进行克隆,克隆的数据是存储在InnoDB中的数据的物理快照,包括schemas、tables、tablespaces和数据字典元数据。由于在mysql主从架构中,缺少了从节点依赖的binlog文件,导致主从数据差异较大,缺少的binlog文件中可能含有一些数据dml和ddl操作,无法直接跳过缺少的binlog日志文件,只能选择清空从库,重新从主节点同步数据,有以下两个方案备选。

qq_26034679的博客 2143

nginx报错:nginx [alert] could not open error log file open() “usrlocalnginxlogserror.log“ faile

原因分析:nginx/目录下没有logs文件夹。

m0_74824780的博客 1479

解决nginx: [alert] could not open error log file启动不了的问题

解决nginx: [alert] could not open error log file: open() "/usr/local/openresty/nginx/logs/error.log" failed (13: Permission denied) 2024/01/20 12:54:44 [emerg] 4800#4800: open() "/usr/local/openresty/nginx/logs/access.log" failed (13: Permission denied)

weixin_53918530的博客 4596

Canal报错:java.io.IOException: Received error packet: errno = 1236, sqlstate = HY000 errmsg = Could no

错误信息如下: 2022-05-19 20:35:15.032 [destination = callin-session , address = /10.xx.xx.xx:3306 , EventParser] ERROR c.a.o.c.p.inbound.mysql.rds.RdsBinlogEventParserProxy - dump address /10.xx.xx.xx:3306 has an error, retrying. caused by java.io.IOException:.

zhaoliubao1的博客 4260

Nginx出现could not open error log file (permission denied)报错

出现以上问题,输入su和密码进入root模式后,重新启动服务器就好了,原因是因为没有权限。

凉凉思语的博客 8079

docker-遇到的错误

pass

say_xiaohuo的博客 3098
上一篇: 技术分享 | TiDB 上百T数据拆分实践
下一篇: 第41期:MySQL 哈希分区表
爱可生开源社区
博客等级 码龄8年 1936粉丝 1004原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值