• 企业400电话
  • 微网小程序
  • AI电话机器人
  • 电商代运营
  • 全 部 栏 目

    企业400电话 网络优化推广 AI电话机器人 呼叫中心 网站建设 商标✡知产 微网小程序 电商运营 彩铃•短信 增值拓展业务
    MySQL 5.6主从报错的实战记录

    1. 问题现象

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

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

    2. 错误含义

    错误分为2部分。

    第一部分

    第一部分

    这部分来源于主库的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主从报错的文章就介绍到这了,更多相关MySQL5.6主从报错内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    您可能感兴趣的文章:
    • mysql5.6 主从复制同步详细配置(图文)
    • MySQL5.6 数据库主从同步安装与配置详解(Master/Slave)
    • MySQL5.6 Replication主从复制(读写分离) 配置完整版
    • MySQL5.6主从复制(mysql数据同步配置)
    • mysql 5.6.14主从复制(也称mysql AB复制)环境配置方法
    • MYSQL5.6.33数据库主从(Master/Slave)同步安装与配置详解(Master-Linux Slave-windows7)
    上一篇:MySQL正确修改最大连接数的3种方案
    下一篇:浅谈MySQL与redis缓存的同步方案
  • 相关文章
  • 

    © 2016-2020 巨人网络通讯 版权所有

    《增值电信业务经营许可证》 苏ICP备15040257号-8

    MySQL 5.6主从报错的实战记录 MySQL,5.6,主从,报,错的,实战,