开发者社区> miles_wong> 正文
阿里云
为了无法计算的价值
打开APP
阿里云APP内打开

mysql relay_log_recovery relay_log_info_repository

简介: relay-log-info 记录SQL线程读取Master binlog的位置,用于Slave 宕机后根据文件中记录的pos点恢复Sql线程 master-info 记录IO线程读取已经读取到的master binlog位置,用于slave宕机...
+关注继续查看

relay-log-info

记录SQL线程读取Master binlog的位置,用于Slave 宕机后根据文件中记录的pos点恢复Sql线程

master-info

记录IO线程读取已经读取到的master binlog位置,用于slave宕机后IO线程根据文件中的POS点重新拉取binlog日志

sync_relay_log_info

执行多少个事务后将relay-log-info,sync一下文件刷新到磁盘

sync_master_info

执行多少个事务后将master-info,sync一下文件刷新到磁盘

所以问题来了,如果下面两个sync参数设置较大,当宕机时:

  • sync_master_info较大将导致重复拉取binlog日志
  • sync_relay_log_info较大将导致重复执行binlog日志

那么设置两个参数为1

sync_master_info=1
sync_relay_log_info=1

是否解决问题了呢?
那么,请考虑如下场景

正常跑的slave突然掉电,最后一个事务已经commit成功了。但是可能还没有将sync_relay_log_info sync到磁盘上。因为sync文件这个动作不是在事务中,所以不能得到保证。当slave恢复之后,读取relay_log_info文件。会将最后一个事务重新做一遍,导致主从数据不一致

问题的关键在于sync操作不是在事务里,所以mysql提供了两个参数

+---------------------------+-------+
| Variable_name             | Value |
+---------------------------+-------+
| master_info_repository    | TABLE |
| relay_log_info_repository | TABLE |
+---------------------------+-------+

这样记录SQL线程及IO线程的执行情况将记录在表中(slave_relay_log_info,slave_master_info),事务的原子性得到了保证。

这里查看一下,sync_relay_log_info与relay_log_info_repository参数间的关系
这里写图片描述
可以看到当relay_log_info_repository为TABLE时,对于事务来说,sync_relay_log_info参数没有作用了

为了简化设置,这里介绍一个参数
relay_log_recovery

参数含义:当slave重启之后会根据slave_relay_log_info重新创建一个文件,SQL线程会根据这个文件进行恢复复制,IO线程会读取SQL线程的POS点,根据这个POS点向主库申请拉取数据

所以最终只要设置如下两个参数即可

relay_log_info_repository = TABLE
relay_log_recovery = ON

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
再深入一点|binlog和relay-log到底长啥样?
上一篇mysql面试的文章之后收到不少朋友的意见,希望深入讲讲复制、日志的格式这些,今天,我们就来深挖一下mysql的复制机制到底有哪一些,以及binlog和relay-log的结构到底是什么样子的。
0 0
MySQL 日志(redo log 和 undo log) 都是什么鬼?
出处:https://www.cnblogs.com/f-ck-need-u/archive/2018/05/08/9010872.html innodb事务日志包括redo log和undo log。redo log是重做日志,提供前滚操作,undo log是回滚日志,提供回滚操作。 undo log不是redo log的逆向过程,其实它们都算是用来恢复的日志:
0 0
你还精通MySQL,竟然连bin log、redo log都不知道!
mysql不是每次数据更改都立刻写到磁盘,而是会先将修改后的结果暂存在内存中,当一段时间后,再一次性将多个修改写到磁盘上,减少磁盘io成本,同时提高操作速度。
905 0
mysql 清除relay-log文件方法详解
<div class="keywords" style="color:rgb(51,51,51); font-family:Simsun; font-size:15px; line-height:28px; list-style:none; margin:0px; padding:0px"> <br> </div> <p style="line-height:25.5px; color
5467 0
MHA 清理relay log(purge_relay_logs)
     MySQL数据库主从复制在缺省情况下从库的relay logs会在SQL线程执行完毕后被自动删除,但是对于MHA场景下,对于某些滞后从库的恢复依赖于其他从库的relay log,因此采取禁用自动删除功能以及定期清理的办法。
793 0
mysql relay log参数汇总
前言:mysql进行主主复制或主从复制的时候会在home目录下面产生相应的relay log,本文档总结这些相关参数的定义及解释   1、什么是relay log The relay log, like the binary log, cons...
792 0
【MySQL】错误信息写入slave_relay_log.index 案例一则
第一次遇到MySQL 将错误信息写入 slave-relay-log.index 中,slave io thread 启动成功,而sql thread 失败的案例,记录下来。
583 0
Log图文详解(Log.v,Log.d,Log.i,Log.w,Log.e)!
android.util.Log常用的方法有以下5个:Log.v() Log.d() Log.i() Log.w() 以及 Log.e() 。
765 0
+关注
miles_wong
Java核心技术 数据存储与数据库 分布式系统与计算 系统研发与运维 编程语言
文章
问答
文章排行榜
最热
最新
相关电子书
更多
MySQL Replication: Latest Developments
立即下载
低代码开发师(初级)实战教程
立即下载
阿里巴巴DevOps 最佳实践手册
立即下载