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中使用mysqldump命令备份
- 将mysql中的表导出来(MySQL之导出整个及单个表数据的操作)
- mysql 索引怎么实现(Mysql中索引和约束的示例语句)
- idea关联mysql数据库(IDEA无法连接mysql数据库的6种解决方法大全)
- 怎么将mysql彻底卸载(如何把Mysql卸载干净亲测有效)
- mysql快速导入1亿数据(mysql批量新增和存储的方法实例)
- thinkphp5.1手动连接mysql数据库(thinkphp5框架结合mysql实现微信登录和自定义分享链接与图文功能示例)
- mysql事务特性和隔离级别(Mysql事务特性和级别原理解析)
- 命令行如何使用xampp中的mysql(解决xampp自启动和mysql.sock问题)
- mysql乐观锁与mvcc(MySQL中的乐观锁,悲观锁和MVCC全面解析)
- mysql binlog模式实际使用(实例验证MySQL|update字段为相同的值是否会记录binlog)
- mysql首次登录不上怎么办(Mysql匿名登录无法创建数据库问题解决方案)
- SQL SERVER与MySQL数据类型的对应关系
- mysql分区表的优缺点(MySQL数据表分区策略及优缺点分析)
- 用mysql语句写python学生管理系统(Python基于mysql实现学生管理系统)
- mysqljoin语句用法(MySQL的join buffer原理)
- 百事大吉蓝底 绿底手机高清壁纸(绿底手机高清壁纸)
- 蓝底证件照怎么制作 证件照换底色 换尺寸快速搞定(蓝底证件照怎么制作)
- 你喜欢足球吗 足球如何点亮世界的(足球如何点亮世界的)
- 不可分鸽是什么梗(不可分鸽是什么梗)
- 古代的鸽子是爱情的象征,并非和平的使者(古代的鸽子是爱情的象征)
- 一课译词 放鸽子(一课译词放鸽子)
热门推荐
- MVC使用HandleErrorAttribute自定义异常
- dedecms如何知道是否授权(DedeCMS Error Warning!提示信息的修改方法)
- ftp上传文件权限设置(FTP二进制上传是什么意思?设置并使用二进制BINARY上传?)
- vue 父组件传值(Vue两个同级组件传值实现)
- elasticsearch数据写入原理(Python对ElasticSearch获取数据及操作)
- dockerswarm网络架构(docker swarm外部验证负载均衡时不生效的解决方案)
- html5创作(HTML5录音实践总结Preact)
- mysql完整教程(MySql新手入门的基本操作汇总)
- C# File类的操作
- python弹跳小球(python实现弹跳小球)
排行榜
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9