zoukankan      html  css  js  c++  java
  • MySQL Replication--中继日志更新

    RELAY LOG相关参数

    设置如何保存从节点接收到的主库BINLOG

    sync_relay_log :
    设置如何同步中继日志到中继日志文件。
    当sync_relay_log = 0时,则MySQL服务不会对中继日志文件进行同步操作,依赖于操作系统来定期进行同步。
    当sync_relay_log = N(N>0),则每N个sync_relay_log事件后对中继日志文件执行一次同步(调用fdatasync())。

    设置如何保存从节点接收主库BINLOG的进度信息

    master_info_repository:
    用于设置如何保存从节点接收到主库BINLOG的位点信息,可选参数可选参数值FILE|TABLE,默认参数为FILE。
    
    sync_master_info:
    参数值N(int),用于设置当N次sync_master_info事件后将信息同步到文件或同步到表中,默认参数值为1000
    当master_info_repository = FILE时,如果sync_master_info=0,则MySQL服务不会对master.info文件进行同步操作,依赖于操作系统来定期进行同步。
    当master_info_repository = TABLE时,如果sync_master_info=0,则MySQL服务不会更新mysql.slave_master_info的数据。
    修改sync_master_info参数值不需要关闭复制进程,修改即时生效。

    设置如何保存从节点上应用RELAYLOG的进度信息

    relay_log_info_repository :
    用于设置如何保存从节点上应用中继日志的位置信息,可选参数可选参数值FILE|TABLE,默认参数为FILE。
    如果设置为FILE,信息存放到relay-log.info文件中,如果设置为TABLE,信息存放到mysql.slave_relay_log_info中。
    如果使用多源复制,必须使用TABLE参数值。
    修改relay_log_info_repository 参数的值需先关闭复制进程再修改然后重启复制线程。
    
    sync_relay_log_info :
    用于设置如何将应用中继日志的位置信息同步到文件和表中,默认参数为10000
    当sync_relay_log_info = FILE时:
    	如果sync_relay_log_info=0,则MySQL服务不会对relay-log.info文件进行同步操作,依赖于操作系统来定期进行同步。
    	如果sync_relay_log_info=N(N>0),则每执行N个事务后将信息使用fdatasync()同步到relay-log.info文件。
    当sync_relay_log_info = TABLE 且表mysql.slave_relay_log_info使用事务存储引擎如Innodb:
    	在每次事务后都会更新mysql.slave_relay_log_info表的数据,忽略sync_relay_log_info的设置。
    当sync_relay_log_info = TABLE 且表mysql.slave_relay_log_info不使用存储引擎如MyISAM:
    	如果sync_relay_log_info=0,则不更新表mysql.slave_relay_log_info的数据。
    	如果sync_relay_log_info=N(N>0),则每执行N个事务后更新表mysql.slave_relay_log_info的数据。

    设置如何恢复RELAY LOG

    relay_log_recovery
    用于设置在relay-log出现问题时如何修复,默认值为0(不开启)
    当slave从库宕机后,假如relay-log损坏了,导致一部分中继日志没有处理,则自动放弃所有未执行的relay-log,并且重新从master上获取日志,这样就保证了relay-log的完整性
    
    当MTS开启后,如果设置relay_log_recovery=1,从节点意外重启或被强制kill后重启,会有如下错误:
    relay-log-recovery cannot be executed when the slave was stopped with an error or killed in MTS mode

    如果从节点上relay_log_info_repository= file 或sync_relay_log_info<>1时,如果从节点发生故障重启,就可能出现从节点已应用第XXX条日志,但relay_log_info中记录的还是第XXX-N的位置,从节点从第XXX-N条日志进行重做,这部分relay log被重复执行,报1032和1062的错误,导致同步失败。因此推荐进行如下设置:

    master_info_repository=TABLE
    relay_log_info_repository=TABLE
    relay_log_recovery=1

    1、由于设置relay_log_recovery=1,当Relay Log出现异常时,能自动恢复,因此无需每次同步RALAY LOG都刷新进度信息(sync_master_info)和每次将RALAY LOG刷新到磁盘(sync_relay_log)

    2、由于设置relay_log_info_repository=TABLE,且表mysql.slave_relay_log_info默认使用InnoDB存储引擎,因为每次应用RALAY LOG中的事件都会刷新mysql.slave_relay_log_info表数据,忽略参数sync_master_info的设置。

    RELAY LOG文件生成与删除

    Relaylog的生成:
    写入一个从Master端得到的event后,会判断当前文件是否超过max_relay_log_size,如果超过则生成一个新的relaylog
    
    Relaylog的删除:
    1>当SQL线程执行完该Relaylog最后一个event后,会判断该文件是否还需要保留,如果不需要保留,则删除
    2>在实例启动和flush logs时,判断relay log是否超过expire-log-days的限制,如果超过,则删除
  • 相关阅读:
    react路由组件&&非路由组件
    react函数式组件(非路由组件)实现路由跳转
    react使用antd组件递归实现左侧菜单导航树
    【LeetCode】65. Valid Number
    【LeetCode】66. Plus One (2 solutions)
    【LeetCode】68. Text Justification
    【LeetCode】69. Sqrt(x) (2 solutions)
    【LeetCode】72. Edit Distance
    【LeetCode】73. Set Matrix Zeroes (2 solutions)
    【LeetCode】76. Minimum Window Substring
  • 原文地址:https://www.cnblogs.com/gaogao67/p/11202864.html
Copyright © 2011-2022 走看看