zoukankan      html  css  js  c++  java
  • 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性能瓶颈。

  • 相关阅读:
    modf()函数
    面向对象编程五大原则
    .Net网络资源
    整理CentOS常用命令
    在RHEL5上安装oracle10gLinux
    strchr()函数
    swab函数
    Strstr()函数
    tmpnam函数
    strdup ()函数
  • 原文地址:https://www.cnblogs.com/polestar/p/6097266.html
Copyright © 2011-2022 走看看