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

crash-safe replication的解析及主从注意事项

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

北京

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

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

看不清楚,换张图片

免费获取短信验证码

crash-safe replication的解析及主从注意事项

先前碰到一个故障,于是引入了crash-safe replication,下面仔细描述;

故障描述:
   从库(slave端)宕机,重启后,mysql同步发现有数据主键冲突;
故障分析:
    从库宕机后,从库的mysql服务遭到非正常退出,部分数据可能未刷新到磁盘;但这个案例是已经有数据刷新到磁盘了.重启后,从库又重新从主库拉取了这部分数据,再次进行了应用,所以导致数据冲突了.所以接下来就要分析主从相关的一些参数了;
   
    先说说,主从同步的那点事儿.
    所谓主从同步,就是主库在生成binlog后,从库拉取主库的binlog,然后将数据应用到从库的过程;
    同步分为半同步和异步同步.这个案例是异步,半同步就不细说了.异步同步是指,在主库生成binlog后,从库拉取主库的binlog应用到从库本机的过程;
    那这里就要重点介绍几个名词信息了:
    IO_thread
    SQL_thread
    master-info.log
    relay-info.log
    IO_tread和SQL_thread,经常搭建主从的同学都知道,这是从库上面用于同步的两个关键线程(show processlist可以看到);
    master-info.log和relay-info.log是记录从库同步位置和状态等一些信息.
   
    来看下这几个名词间的联系:
    从主库生成binlog开始,从库拉取binlog到本机,传输完成后,IO_thread会将拉取到的binlog的文件名及事务位置(postion和gtid)记录到master-info.log,同时,SQL_thread会将拉取到的binlog应用到本地,应用完成后会将完成的binlog文件名和事务位置(postion和gtid)写入到relay-info.log.
    这是整个的同步过程.(注意:这两个文件记录的binlog相关信息都是主库的信息,从库的binlog是不会记录到这两个文件的.)
    这个过程有两点需要注意:
    1.在默认配置的情况下,master-info.log和relay-info.log文件系统层面完成写入操作的.也就是说mysql在将更改信息完成后提交给OS的缓存,什么时候刷盘是由OS决定的.
    2.如果从库宕机,重启后,会去读取master-info.log的位置信息.5.6后启用了relay_log_recovery参数,将读取relay-info.log的位置,而不读取master-info.log;
   
    那么结合这个案例,我们就很清晰的知道问题出在哪了.
    1.IO_thread拉取完数据,master_info的更改信息在OS的缓存里,还未更改文件,同时,SQL_thread已经应用完数据,这个时候宕机了.那就造成了,master-info.log未更新,但数据库已经将数据写入了.重启后,IO_thread根据未更新的master-info.log重新拉取了重复的数据.
    2.在启用了relay_log_recovery后,重启从库后读取的是relay-info.log文件,跟上面情况类似,也是未更新到relay-info.log,然后重新应用了.
    3.sync_relay_log和master_relay_log参数为1,这种情况会丢失最后一个事务.导致最后同步的一个事务冲突.
解决方法:
    查看冲突数据是否一致,要么在从库删除该数据,让从库重新应用,要么就跳过该错误,继续同步,具体方法不累述,网上大把大把的案例.
   
总结:
    主从异步同步,很多场景都会用到,主从不同步也是经常发生.好在mysql一直在不断的进步,修改.到mysql5.7,主从架构已经相当成熟了.你要相信,你踩到的坑,肯定有很多前辈已经踩过很多次了,所以,放心大胆的用吧.为了让大家少掉坑,我总结下使用异步同步的一些参数设置和一些坑.
   
    主库:1.binlog_format=row 能选用row格式,其他两种就别考虑了,具体的坑太多了.
         2.sync_binlog=1,innodb_flush_log_at_trx_commit=1  不要问我为什么.安全是数据库的唯一标准.
         3.log_bin_trust_function_creators =1 这个开一下吧,备用,万一被那个二货给改了binlog行模式勒.
         4.binlog_rows_query_log_events =1  这个挺有用的,记录sql,row格式下,看binlog是挺不好看的.有这参数,杠杠的.
        
    从库:master-info-repository=table           
         relay-log-info-repository=table 改成table吧... SQL_thread会吧更改relay-log-info放到应用事务的同一个事务里面,这样就实现了事务与日志修改的原子性了
         relay_log_recovery = 1   读的是relay-info的信息,而且会把未执行的relay-log给删掉,重新拉取.
         sync_relay_log_info=1   这个,如果relay-info为table的话,可用可不用.如果是file,加个保险吧.
         sync_master_info=1   能保证master-info的一致性.
        
 crash-safe 不管是主库还是从库,都挺蛋疼的.上面主要讲的还是crash-safe replication的一些参数.总之保证安全的前提下,在去提升效率吧.如果你觉得可以牺牲安全来保证效率,那就忽略吧.




免责声明:

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

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

crash-safe replication的解析及主从注意事项

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

下载Word文档

猜你喜欢

共享的注意事项及解决方法

2018年,文件共享服务项目DropBox使西北大学在2年的时间内“浏览了与新项目文件夹有关的数据信息”——遮盖了1000所高校中的约四十万名客户。那么文件共享的注意事项及解决方法有哪些呢? 该类电子器件文件共享系统软件技术性安全保卫被攻克,管理方法渎职的状况
共享的注意事项及解决方法
2015-12-04

如何解析初学Python时的注意事项

如何解析初学Python时的注意事项,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。初学Python时需要注意相关事项,首先初学Python时要先知道什么是Pyt
2023-06-17

云主机的特点以及JSP云主机注册的注意事项是什么

这篇文章给大家介绍云主机的特点以及JSP云主机注册的注意事项是什么,内容非常详细,感兴趣的小伙伴们可以参考借鉴,希望对大家能有所帮助。JSP云主机指的就是JAVA中文站在大规模分布式计算系统基础上,通过虚拟化技术整合IT资源为网络上的各种行
2023-06-07

Android NDK中socket的用法以及注意事项分析

Android NDK中使用socket的整个过程分为以下几部分:第一部分: 创建socket并绑定IP和端口 代码如下:#include #include #include
2022-06-06

解析Golang异或运算符的用法及需要注意的事项

Golang异或符的用法及注意事项解析引言:Golang是一门开发效率高、规范性强的编程语言。在Golang中,位运算符是一种强大的工具,能够有效地处理二进制数据。在位运算符中,异或符号(^)在处理二进制数据时起着重要的作用。本文将详细解
解析Golang异或运算符的用法及需要注意的事项
2024-01-29

[MySQL]MySQL8.0的一些注意事项以及解决方案

MySQL8.0 注意事项以及解决方案1. MySQL8.0 修改大小写敏感配置天坑MySQL8.0! 在安装后, 便无法通过修改配置文件,重启服务,或者执行sql来更改数据库配置, 要想配置的话, 必须在MySQL安装完成后, 进行修改配置文件, 否则需要删
[MySQL]MySQL8.0的一些注意事项以及解决方案
2016-07-02

详解Python中深浅拷贝的使用及注意事项

Python中的深浅拷贝是经常被使用的概念,对于初学者来说可能会比较难以理解,本文将详细阐述Python深浅拷贝的概念、使用场景、注意事项以及如何实现深浅拷贝
2023-05-15

解析Golang中接口的使用场景和注意事项

Golang中接口的使用场景和注意事项解析Golang作为一门静态类型语言,引入了接口(interface)的概念,以便更好地支持面向对象的编程方式。接口在Golang中是一个非常重要的概念,在实际开发中经常用到。本文将从使用场景和注意事
解析Golang中接口的使用场景和注意事项
2024-01-24

Python升级pip的步骤和注意事项的详细解析

详解Python升级pip的步骤和注意事项,需要具体代码示例在使用Python开发过程中,经常会使用到pip来安装、升级和管理各种Python包和模块。然而,随着时间的推移,pip版本可能会变得过时,导致一些功能无法正常使用。因此,时不时
Python升级pip的步骤和注意事项的详细解析
2024-01-18

CentOS搭建web服务器的方法及注意事项详解

搭建Web服务器是在CentOS上部署网站的一种常见方式。以下是搭建Web服务器的方法及注意事项的详细解释:步骤1:安装必要的软件包在CentOS上搭建Web服务器之前,您需要安装一些必要的软件包。其中最常用的是Apache HTTP服务器
2023-10-09

阿里云服务器接电脑主机详解操作步骤及注意事项

在信息化时代,企业的发展越来越离不开云计算技术。对于许多企业来说,使用阿里云服务器接电脑主机是一种常见的操作方式。本文将详细介绍如何操作阿里云服务器接电脑主机,以及需要注意的事项。一、操作步骤登录阿里云账号:首先,你需要在阿里云官网注册一个账号,然后登录。创建阿里云服务器:在阿里云管理控制台,选择“ECS”,然后
阿里云服务器接电脑主机详解操作步骤及注意事项
2023-12-15

编程热搜

目录