我的编程空间,编程开发者的网络收藏夹
学习永远不晚

MySQL 5.6主从报错分析

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

MySQL 5.6主从报错分析

本篇内容主要讲解“MySQL 5.6主从报错分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL 5.6主从报错分析”吧!

1. 问题现象

版本:MySQL 5.6,采用传统 binlog file & pos 方式配置的主从复制结构。

MySQL 5.6主从报错分析

实例重启后,主从复制报错如上图所示。

2. 错误含义

错误分为2部分。

第一部分

  • Client requested master to start replication from position > file size;

  • the first event 'mysql-bin.000398' at 163800795,the last event read from './mysql-binlog.000398' at 4,the last byte read from './mysql-bin.000398' at 4'

第一部分

这部分来源于主库的DUMP线程函数

mysql_binlog_send ->sender.run()  ->Binlog_sender::init    ->Binlog_sender::check_start_file if ((file= open_binlog_file(&cache, m_linfo.log_file_name, &errmsg)) < 0)  {  set_fatal_error(errmsg);  return 1; } size= my_b_filelength(&cache); end_io_cache(&cache); mysql_file_close(file, MYF(MY_WME)); if (m_start_pos > size) {  set_fatal_error("Client requested master to start replication from "          "position > file size");  return 1; }

关键就是m_start_pos和size两个值,其中m_start_pos来源于从库需要读取的位点。而size则是本binlog文件的大小,那么很容易理解如果io线程需要的pos点比本binlog文件的大小还要大,那么自然不对。

第二部分

这部分也来源于DUMP线程

mysql_binlog_send ->sender.run()   ->Binlog_sender::init   ->while (!has_error() && !m_thd->killed)   #如果正常这里开始循环读取binlog event,如果前面出错则直接继续后面逻辑   #如果有读取错误则报错    my_snprintf(error_text, sizeof(error_text),         "%s; the first event '%s' at %lld, "         "the last event read from '%s' at %lld, "         "the last byte read from '%s' at %lld.",         m_errmsg,         m_start_file, m_start_pos, m_last_file, m_last_pos,         log_file, my_b_tell(&log_cache));

这里我们主要看看m_start_pos和m_last_pos,实际上m_start_pos就是和前面报错一致的来自从库需要读取的位点信息,而m_last_pos来自dump线程,就是最后读取的位置,显然这里一次都没有读取,因此位置为最开始的pos 4。

3. 可能的原因

分析后觉得最有可能原因应该和sync_binlog 有关。

如果我们没有设置为1,那么可能os cache没有刷盘,如果主库服务器直接crash重启很容易就遇到这种问题。

稍微google查询了一下发现很大部分出现这种错误都是由于服务器crash且sync_binlog 没设置为 1导致的。

这也证明我们的说法。

最后查看问题数据库的主库确实没有设置为双1。

那么通过这个小案例,我们已经更加深刻体会到设置双1的重要性。

总结

到此,相信大家对“MySQL 5.6主从报错分析”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

MySQL 5.6主从报错分析

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

MySQL 5.6主从报错分析

本篇内容主要讲解“MySQL 5.6主从报错分析”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“MySQL 5.6主从报错分析”吧!1. 问题现象版本:MySQL 5.6,采用传统 binlog
2023-06-14

MySQL 5.6主从报错的实战记录

1. 问题现象版本:MySQL 5.6,采用传统 binlog file & pos 方式配置的主从复制结构。实例重启后,主从复制报错如上图所示。 2. 错误含义错误分为2部分。 第一部分Client requested master to
2022-05-26

详细分析MySQL主从复制

前言: 在MySQL中,主从架构应该是最基础、最常用的一种架构了。后续的读写分离、多活高可用架构等大多都依赖于主从复制。主从复制也是我们学习MySQL过程中必不可少的一部分,关于主从复制的文章有很多,笔者也来凑凑热闹,写写这方面的内容吧,同
2022-05-13

MySQL主从搭建的示例分析

这篇文章给大家分享的是有关MySQL主从搭建的示例分析的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。背景:由于最近公司项目好像有点受不住并发压力了,优化迫在眉睫。由于当前系统是单数据库系统原因,能优化的地方也尽力
2023-06-15

3分钟解决MySQL 1062 主从错误

1062错误----主键冲突,出现这种情况就是从库出现插入操作,主库又重新来了一遍,iothread没问题,sqlthread出错解决方案:mysql> stop slave; mysql> set global sql_slave_ski
2023-01-31

mysql 主从复制如何跳过报错

一、传统binlog主从复制,跳过报错方法mysql> stop slave; mysql> set global sql_slave_skip_counter = 1; mysql> start slave; mysql> show sl
2022-05-28

编程热搜

目录