原标题:MySQL 5.6 主从报错一例

作者:八怪(高鹏) 中亦科技数据库专家

1. 问题现象

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

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

2. 错误含义

错误分为2部分。

第一部分

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

第一部分

这部分来源于主库的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);

return1;

}

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");

return1;

}

关键就是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的重要性。

Enjoy MySQL :)返回搜狐,查看更多

责任编辑:

mysql pos点是什么,MySQL 5.6 主从报错一例相关推荐

  1. MySQL 5.6 主从报错一例

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

  2. mysql 主从报错

    mysql 主从报错 mysql> change master to  master_host='10.1.2.3', master_user='slave', master_password= ...

  3. mysql5.7 delimiter_percona MYSQL 5.7.13 5.7.14 MYSQLDUMP 导入报错delimiter (修改MYSQLDUMP代码)...

    percona MYSQL 5.7.13 5.7.14 MYSQLDUMP 导入报错delimiter (修改MYSQLDUMP代码) 重庆八怪 2016-09-26 15:12:22 浏览1094 ...

  4. mysql主从报错_Mysql主从报错锦集

    前言 在发生故障切换后,经常遇到的问题就是同步报错,下面是最近收集的报错信息. 记录删除失败 在master上删除一条记录,而slave上找不到 Last_SQL_Error: Could not e ...

  5. mysql无法插入行_在mysql中数据才插入20多行就报错,求救啊!!!

    mysql的建表语句如下:CREATETABLE`auth_function`(`id`varchar(255)NOTNULL,`name`varchar(255)DEFAULTNULL,`descr ...

  6. mysql scope runtime_Maven依赖scope属性详解-一个报错引发的问题 - 老郭种树

    ApplicationEventMulticaster not initialized - call 'refresh' before multicasting events via the cont ...

  7. mysql的groupby原理是啥_mysql数据库groupby报错原理是什么?

    mysql数据库groupby报错原理是什么? 八一xiaobayi 2020-03-18 09:05:04 mysql> select count(9),floor(rand(0)*2) as ...

  8. mysql adminer 导入csv_mysql导入csv的4种报错的解决方法

    以此悼念我今天踩过的4个坑-- 坑一:local的错 报错: error 3948 (42000): loading local data is disabled; this must be enab ...

  9. mysql 1005 - can't create table_关于创建数据表报错一例(ERROR 1005 Can’t create table (errno: 121))...

    问题描述 曾遇到创建数据表报错问题,报错如下: ERROR 1005 (HY000) at line 18: Can't create table 'db1.t2' (errno: 121) 通过日志 ...

最新文章

  1. 人工智能正在激活互联网类脑系统,2018年,云脑将成为新热点
  2. 24、Java Swing JTabbedPane:选项卡组件
  3. Python-OpenCV 笔记8 -- PIL.Image和OpenCV图像格式转换
  4. java 可以直接当自定义标示符_第2章 Java基本语法.ppt
  5. VIVADO时序约束及STA基础
  6. java 泛型示例_Java泛型示例教程–泛型方法,类,接口
  7. 深入理解JVM(4)——如何优化Java GC
  8. 《测绘综合能力》——地籍测绘
  9. JAVA核酸预约检测管理系统毕业设计 开题报告
  10. ajax几种回调函数
  11. java 线程 假死_JVM假死问题如何定位?
  12. 【转】 HMC与VIOS对新LPAR提供存储与网络虚拟化的支持
  13. Linux ps命令简介
  14. 最新公司级 OKRs 案例
  15. 终于在国庆前找到工作了!(面试全过程真实记录)
  16. educoder数据结构与算法 图 第2关:实现图的深度优先遍历
  17. 跳格子/贪心算法例题详解:LeetCode605.种花问题
  18. 为什么我要放弃竖屏的短视频?自媒体时代,拍横屏视频能赚钱吗?
  19. jquey javascript 绑定点击事件(click事件无反应,因js获取不到当前的点击项)
  20. Oracle function函数赋权

热门文章

  1. OpenCV与c语言图像融合
  2. Php 表单转json,form转json实现方法
  3. 2020下半年新机最新消息_2020年下半年新机看点汇总:最看好的还是麒麟1020处理器!...
  4. python turtle基本语法_Python 基础语法-turtle篇
  5. spring applicationContext.xml最全约束
  6. mysql 取绝对值_自学MySQL第六天
  7. Django连接mysql数据库浅析
  8. Jenkins中的邮件设置
  9. pythonlist基本操作_Python list 常用操作
  10. python项目面试_Python面试中最常见的25个问题-结束