在slave上有两个线程:io线程和sql线程
io线程接收master的二进制日志信息并写入到本地的relay log中;sql线程执行本地relay log中的信息。
io线程读取到的二进制日志当前位置信息写在master.info中;sql线程读取到的当前relay log位置信息写在realy-log.info文件中

存在的问题就是相应的内容写入文件后,并不能都实时刷新到磁盘上。当mysql实例crash后,对应的位置信息就可能不一致。
在5.6中可以set sync_master_info = 1和 sync_relay_log_info =1来确保每个事务结束后对应的信息被写入磁盘。
但是复制信息是在事务提交后才写的,如果在事务提交后slave发生了crash,而realy-log.info信息还没有被更新,实例重启后就可能会导致事务执行两次,就可能会发生复制错误。当然也可能对复制没有影响。

5.6中,引进了两个参数relay_log_info_repository、master_info_repository
设置relay_log_info_repository=table,就会创建表mysql.slave_relay_log_info,并将realy-log.info文件中的信息写入到该表中。
设置master_info_repository=table,就会创建表mysql.slave_master_info,并将master.info文件中的信息写入该表。
这个方法很简单,就是把SQL线程的事务和更新mysql.slave_relay_log_info的语句看成一个事务处理,这样就会一直同步的.

虽然解决了sql线程的问题,但是io线程的问题还没有解决,因为更新slave_master_info表跟事务没有关系。那么如何让msyql server更新该表呢?
于是又引入了参数sync_master_info,5.6.6之后默认值是10000。

当master_info_repository=file,sync_master_info=n的值大于0,表示n个events之后刷新到磁盘;如果n值为0,表示如何刷新到磁盘取决于操作系统。
当master_info_repository=table,sync_master_info=n的值大于0,表示n个events之后更新表mysql.slave_master_info;如果n值为0,表示不更新mysql.slave_master_info。

还有更优雅的方法,使用参数relay_log_recovery = ON,但是设置这个参数生效,需要服务器重启。
开启该参数,重启server后,io线程抛弃现有的IOthread的偏移量,从slave_relay_log_info表中获取当前的IO线程偏移量,这样你就不需要以为crash-safe存储IO线程的信息到表里。也就是说master_info_repository = TABLE不是必须的。

最后注意,relay_log_info_repository = TABLE和 sync_relay_log_info是 没有关联的。所以你可以放心的从配置文件中移除sync_relay_log_info。

MySQL 5.6新特性 -- crash-safe replication的更多相关文章

  1. InnoSQL HA Suite的实现原理与配置说明 InnoSQL的VSR功能Virtual Sync Replication MySQL 5.5版本引入了半同步复制(semi-sync replicaiton)的功能 MySQL 5.6支持了crash safe功能

    InnoSQL HA Suite的实现原理与配置说明  InnoSQL的VSR功能Virtual Sync Replication MySQL 5.5版本引入了半同步复制(semi-sync repl ...

  2. [转帖 ]MySQL 5.7 新特性 JSON

    MySQL 5.7 新特性 JSON 的创建,插入,查询,更新 作者: 我不是鱼 (2016-08-31 16:13)分类: MySQL   标签: MySQL JSON MySQL JSON 应用 ...

  3. Mysql 8.0 新特性测试

    Mysql 8.0 新特性测试 Role MySQL8.0版本添加了role特性,role是一种逻辑概念是权限的集合,可以将一个或以上的权限赋予给role,再将role赋给user.Oracle,Po ...

  4. MySQL 8.0 新特性梳理汇总

    一 历史版本发布回顾 从上图可以看出,基本遵循 5+3+3 模式 5---GA发布后,5年 就停止通用常规的更新了(功能不再更新了): 3---企业版的,+3年功能不再更新了: 3 ---完全停止更新 ...

  5. Mysql 5.6 新特性

    随笔,真的随笔,以后理解得更深了再修改.   Index Condition Pushdown 更多的让存储引擎去处理Where语句中的条款,避免返回无关字段数据等:   Multi-Range Re ...

  6. MySQL 5.7新特性介绍

    本文是基于MySQL-5.7.7-rc版本,未来可能 还会发生更多变化. 1.即将删除的特性1.1.InnoDB monitoring features,详见:WL#7377(访问地址:http:// ...

  7. MySQL 5.7新特性之Generated Column(函数索引)

    MySQL 5.7引入了Generated Column,这篇文章简单地介绍了Generated Column的使用方法和注意事项,为读者了解MySQL 5.7提供一个快速的.完整的教程.这篇文章围绕 ...

  8. 初识 MySQL 5.6 新特性、功能

    背景: 之前介绍过 MySQL 5.5 新功能.参数,现在要用MySQL5.6,所以就学习和了解下MySQL5.6新的特性和功能,尽量避免踩坑.在后续的学习过程中文章也会不定时更新. 一:参数默认值的 ...

  9. MySQL 5.7新特性之generated column

    MySQL 5.7引入了generated column,这篇文章简单地介绍了generated column的使用方法和注意事项,为读者了解MySQL 5.7提供一个快速的.完整的教程.这篇文章围绕 ...

  10. MySQL 5.6新特性 -- Multi-Range Read

    如果基表很大,数据没有被缓存,在二级索引上使用范围扫描读取行可能会导致大量的随机磁盘访问.使用Multi-Range Read新特性,mysql可以减少对磁盘的随机读的次数:首先,mysql只是扫描索 ...

随机推荐

  1. 【莫比乌斯反演】HDU1695_GCD

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1695 第一道莫比乌斯反演 感觉很巧妙的就是利用了F(x)=(n/x)*(m/x) 之后的那个去重也挺不 ...

  2. 016 在大数据中,SSH无密钥登录

    一:概述 1.关于ssh ssh是一种安全协议. 会生成一对公钥和私钥. 2.问题的由来 3.解决方式 将生成的公钥发送到远程的机器上. 4.位置 主目录下的.ssh文件下. 二:在伪分布式下的操作 ...

  3. python中简单文件的输入三种方式

    最近在自学python,简单的总结了一下文件的输入的方式. 1. f=open("foo.txt") line=f.readline() while line: print(lin ...

  4. Python 爬取生成中文词云以爬取知乎用户属性为例

    代码如下: # -*- coding:utf-8 -*- import requests import pandas as pd import time import matplotlib.pyplo ...

  5. [OpenCV-Python] OpenCV 中的图像处理 部分 IV (三)

    部分 IVOpenCV 中的图像处理 OpenCV-Python 中文教程(搬运)目录 19 Canny 边缘检测 目标 • 了解 Canny 边缘检测的概念 • 学习函数 cv2.Canny() 1 ...

  6. 《gradle权威指南》--Gradle入门

    No1: Window下搭建Gradle:添加GRADLE_HOME环境变量,然后把GRADLE_HOME\bin添加到PATH系统变量里保存即可.完成后打开CMD,运行gradle -v来验证 No ...

  7. CPU个数、CPU核心数、CPU线程数

    CPU个数.CPU核心数.CPU线程数 我们在选购电脑的时候,CPU是一个需要考虑到核心因素,因为它决定了电脑的性能等级.CPU从早期的单核,发展到现在的双核,多核.CPU除了核心数之外,还有线程数之 ...

  8. java中thread的start()和run()的区别

    1.start()方法来启动线程,真正实现了多线程运行,这时无需等待run方法体代码执行完毕而直接继续执行下面的代码: 通过调用Thread类的start()方法来启动一个线程, 这时此线程是处于就绪 ...

  9. gbdt xgboost 贼难理解!

    https://www.zybuluo.com/yxd/note/611571 https://zhuanlan.zhihu.com/p/29765582 gbdt 在看统计学习方法的时候 理解很吃力 ...

  10. BZOJ1395 : [Baltic2005]Trip

    建立新图,原图中每条边在新图中是点,新图中每个点的点权为$-e[i].c+e[i].b$,边权为$0$. 若$e[i].d\leq e[j].a$,则连一条$i$到$j$的单向边. 对于原图中每个点, ...