mysql总是报错error(MySQL 5.6主从报错的实战记录)
mysql总是报错error
MySQL 5.6主从报错的实战记录1. 问题现象
版本:MySQL 5.6,采用传统 binlog file & pos 方式配置的主从复制结构。
实例重启后,主从复制报错如上图所示。
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主从报错的文章就介绍到这了,更多相关MySQL5.6主从报错内容请搜索开心学习网以前的文章或继续浏览下面的相关文章希望大家以后多多支持开心学习网!
原文链接:https://mp.weixin.qq.com/s/7uQk5cRjfgUxyDcLS7CURg
- mysql数据库主键选择的详解(图文详解MySQL中的主键与事务)
- docker中mysql连接命令(docker 如何修改mysql的root密码)
- mysql最佳配置(详解DBeaver连接MySQL8以上版本以及解决可能遇到的问题)
- mysql binlog模式实际使用(实例验证MySQL|update字段为相同的值是否会记录binlog)
- mysql数据库怎么换行(MySQL数据中很多换行符和回车符的解决方法)
- mysql死锁情况(MySQL kill不掉线程的原因)
- mysql中innodb的特性(Mysql InnoDB的锁定机制实例详解)
- mysql 排序源码(MySQL排序原理和案例详析)
- mysql查看死锁记录(mysql查看死锁与去除死锁示例详解)
- mysql mvcc 底层原理(浅析MySQL - MVCC)
- mysql命令输入行在哪(MySQL命令行操作时的编码问题详解)
- mysql中使用show table status 查看表信息
- mysql数据库数据分析(详解MySQL数据库千万级数据查询和存储)
- mysql的count知识(MySQL中MTR的概念)
- mysql数据库简单操作(一篇文章教会你进行MySQL数据库和数据表的基本操作)
- dockerfile构建mysql镜像并初始化(docker-compose基于MySQL8部署项目的实现)
- 阴阳师孟婆御魂推荐 孟婆御魂搭配毕业套(阴阳师孟婆御魂推荐)
- 袁冰妍终于接到新剧,饰演反追男主,看到合作演员 眼光果然毒辣(袁冰妍终于接到新剧)
- 记忆中的台词(记忆中的台词)
- 袁冰妍轧戏 拍《琉璃》的同时还在拍《将夜》,难怪被骂演技差(拍琉璃的同时还在拍将夜)
- 刚红就耍大牌,《琉璃》角色滤镜碎一地,心疼工作人员(琉璃角色滤镜碎一地)
- 袁冰妍郑业成这对可以处,有脸红情话他们是真的敢说(袁冰妍郑业成这对可以处)
热门推荐
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9