加入收藏 | 设为首页 | 会员中心 | 我要投稿 财气旺网 - 财气网 (https://www.caiqiwang.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 移动互联 > 通讯 > 正文

如何理解slave库写redo、binlog不实时丢数据的情景

发布时间:2021-12-20 12:41:22 所属栏目:通讯 来源:互联网
导读:如何理解slave库写redo、binlog不实时丢数据的场景,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。 1.slave涉及相关文件 slave读取master的binlog日志后,需要落地3个文件:relay log、rel
如何理解slave库写redo、binlog不实时丢数据的场景,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。
 
1.slave涉及相关文件
 
  slave读取master的binlog日志后,需要落地3个文件:relay log、relay log info、master info:
 
relay log:      即读取过来的master的binlog,内容与格式与master的binlog一致
relay log info: 记录SQL Thread应用的relay log的位置、文件号等信息
master info:    记录IO Thread读取master的binlog的位置、文件号、延迟等信息
 
如果当这3个文件如果不及时落地,则主机crash后会导致数据的不一致。
 
2.信息存储方式
 
在MySQL 5.6.2之前,slave记录的master信息以及slave应用binlog的信息存放在文件中,即master.info与relay-log.info。在5.6.2版本之后,允许记录到table中,参数设置如下:
 
master-info-repository  = TABLE             
relay-log-info-repository = TABLE   
 
 
对应的表分别为mysql.slave_master_info与mysql.slave_relay_log_info,且这两个表均为innodb引擎表。
 
 
3.控制刷新参数
 
 
relay log、relay log info与master info还有3个参数控制刷新:
 
?sync_relay_log:默认为10000,即每10000次sync_relay_log事件会刷新到磁盘。为0则表示不刷新,交由OS的cache控制。
?sync_relay_log_info:若relay_log_info_repository为FILE,当设置为0,交由OS刷新磁盘,默认为10000次刷新到磁盘;若relay_log_info_repository为TABLE,且为INNODB存储,则无论为任何值,则都每次evnet都会更新表。
?sync_master_info:若master-info-repository为FILE,当设置为0,则每次sync_master_info事件都会刷新到磁盘,默认为10000次刷新到磁盘;若master-info-repository为TABLE,当设置为0,则表不做任何更新,设置为1,则每次事件会更新表 默认为10000
 
 
4.建议参数设置
 
sync_relay_log = 1             
sync_master_info = 1         
sync_relay_log_info = 1             
master-info-repository  = TABLE
relay-log-info-repository = TABLE     
 
 
当这样设置,导致调用fsync()/fdatasync()随着master的事务的增加而增加,且若slave的binlog和redo也实时刷新的话,会带来很严重的IO性能瓶颈。
 
看完上述内容,你们掌握如何理解slave库写redo、binlog不实时丢数据的场景的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注亿速云行业资讯频道,感谢各位的阅读!

(编辑:财气旺网 - 财气网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    热点阅读