mysql确认半同步命令_怎么判断mysql是否是半同步复制
AFTER_COMMIT(5.6默认值)
master将每个事务写入binlog ,传递到slave 刷新到磁盘(relay log),同时主库提交事务。master等待slave 反馈收到relay log,只有收到ACK后master才将commit OK结果反馈给客户端。
AFTER_SYNC(5.7默认值,但5.6中无此模式)
master 将每个事务写入binlog , 传递到slave 刷新到磁盘(relay log)。master等待slave 反馈接收到relay log的ack之后,再提交事务并且返回commit OK结果给客户端。 即使主库crash,所有在主库上已经提交的事务都能保证已经同步到slave的relay log中。
因此5.7引入了after_sync模式,带来的主要收益是解决after_commit导致的master crash主从间数据不一致问题,因此在引入after_sync模式后,所有提交的数据已经都被复制,故障切换时数据一致性将得到提升。
2 性能提升支持发送binlog和接受ack的异步化
旧版本的semi sync 受限于dump thread ,原因是dump thread 承担了两份不同且又十分频繁的任务:传送binlog 给slave ,还需要等待slave反馈信息,而且这两个任务是串行的,dump thread 必须等待 slave 返回之后才会传送下一个 events 事务。dump thread 已然成为整个半同步提高性能的瓶颈。在高并发业务场景下,这样的机制会影响数据库整体的TPS .
图:Without ACK receiving thread
为了解决上述问题,在5.7版本的semi sync 框架中,独立出一个 ack collector thread ,专门用于接收slave 的反馈信息。这样master 上有两个线程独立工作,可以同时发送binlog 到slave ,和接收slave的反馈。
图:With ACK receiving thread3 性能提升控制主库接收slave 写事务成功反馈数量
MySQL 5.7新增了rpl_semi_sync_master_wait_slave_count参数,可以用来控制主库接受多少个slave写事务成功反馈,给高可用架构切换提供了灵活性。
如图所示,当count值为2时,master需等待两个slave的ack
4 性能提升
Binlog 互斥锁改进
旧版本半同步复制在主提交binlog的写会话和dump thread读binlog的操作都会对binlog添加互斥锁,导致binlog文件的读写是串行化的,存在并发度的问题。
MySQL 5.7对binlog lock进行了以下两方面优化
1.移除了dump thread对binlog的互斥锁
2.加入了安全边际保证binlog的读安全
5 性能提升组提交
5.7引入了新的变量slave-parallel-type,其可以配置的值有:
DATABASE (5.7之前默认值),基于库的并行复制方式;LOGICAL_CLOCK (5.7新增值),基于组提交的并行复制方式;
MySQL 5.6版本也支持所谓的并行复制,但是其并行只是基于DATABASE的,也就是基于库的。如果用户的MySQL数据库实例中存在多个DATABASE ,对于从机复制的速度的确可以有比较大的帮助,如果用户实例仅有一个库,那么就无法实现并行回放,甚至性能会比原来的单线程更差。
MySQL5.7中增加了一种新的并行模式:为同时进入COMMIT阶段的事务分配相同的序列号,这些拥有相同序列号的事务在备库是可以并发执行的。
MySQL 5.7真正实现的并行复制,这其中最为主要的原因就是slave服务器的回放与主机是一致的即master服务器上是怎么并行执行的slave上就怎样进行并行回放。不再有库的并行复制限制,对于二进制日志格式也无特殊的要求(基于库的并行复制也没有要求)。
因此下面的序列中可以并发的序列为(其中前面一个数字为last_committed ,后面一个数字为sequence_number ):
trx1 1…..2trx2 1………….3trx3 1…………………….4trx4 2……………………….5trx5 3…………………………..6trx6 3………………………………7trx7 6………………………………..8
备库并行规则:当分发一个事务时,其last_committed 序列号比当前正在执行的事务的最小sequence_number要小时,则允许执行。
因此,
a)trx1执行,last_commit<2的可并发,trx2, trx3可继续分发执行
b)trx1执行完成后,last_commit < 3的可以执行, trx4可分发
c)trx2执行完成后,last_commit < 4的可以执行, trx5, trx6可分发
d)trx3、trx4、trx5完成后,last_commit < 7的可以执行,trx7可分发
综上所述
我们认为MySQL 5.7版对Loss-Less半同步复制技术的优化,使得其成熟度和执行效率都得到了质的提高。我们建议在使用MySQL 5.7作为生产环境的部署时,可以使用半同步技术作为高可用与读写分离方案的数据复制方案。
请点击输入图片描述
mysql确认半同步命令_怎么判断mysql是否是半同步复制相关推荐
- linux ntp时间立即同步命令_记一次生产环境部署NTP服务及配置时间同步
概述 linux服务器在提供服务时,要和其他机器进行请求的交互,实际生产环境中,可能因为时间不同步,导致了服务异常. 下面介绍下怎么部署NTP服务来解决这个问题. ps:强烈吐槽下头条这个新排版功能, ...
- mysql 数据库安装命令_教你MySQL数据库的编译安装以及命令详解(5.7版本)
一.安装MySQL所需的环境依赖包 [root@localhost opt]# yum -y install gcc gcc-c++ make ncurses ncurses-devel bison ...
- mysql update多个字段_常见的MySQL命令大全fourth
1:使用SHOW语句找出在服务器上当前存在什么数据库: mysql> SHOW DATABASES; 2:2.创建一个数据库MYSQLDATA mysql> Create DATABASE ...
- mysql用help查看帮助_深入理解mysql帮助命令(help)
在安装.管理和使用mysql过程中,你是不是需要记忆很多的mysql命令.而且对于新手来说,很不多的命令不知道该如何应用,对于老手来说很多命令时间长了忘记具体的用法. 其实mysql的帮助信息,已经给 ...
- h命令可以获取mysql客户端的帮助信息_如何获取MySQL帮助信息
在开发或测试环境在碰到MySQL相关故障时,大多数朋友可能会通过论坛发帖,QQ群讨论方式来获取帮助.该方式是获取帮助的有效途径之一.然而如果在生产环境,在没有网络的环境下,这些方式就无助于问题的解决. ...
- mysql禁用历史命令_如何禁止mysql记录历史命令
如何禁止mysql记录历史命令?在执行 SQL命令时,mysql会将历史命令记录到~/.mysql_history文件中,因此我们用上下键就可以翻阅历史命令了. 也许某些特殊需要我们可能需要不让它记录 ...
- mysql面试常用命令_面试之MySQL基本命令
既然要操作数据库就从数据库链接写起,包括建库.建表.增删该查字段及约束,删库,删表的数据,以下主要是对我以往面试的总结,欢迎补充! 一.数据库连接 1.连接本机(p和密码123456之间无空格) my ...
- mysql重启数据库实例命令_各个平台的mysql重启命令
inux平台及windows平台mysql重启方法 Linux下重启MySQL的正确方法: 1.通过rpm包安装的MySQL service mysqld restart 2.从源码包安装的MySQL ...
- mysql创建sql文件命令_创建包含sql命令的sql脚本文件
sql脚本是包含一到多个sql命令的sql语句,我们可以将这些sql脚本放在一个文本文件中(我们称之为"sql脚本文件"),然后通过相关的命令执行这个sql脚本文件.基本步骤如下: ...
最新文章
- 2.5 学习词嵌入-深度学习第五课《序列模型》-Stanford吴恩达教授
- MySQL substring-index_mysql函数之SUBSTRING_INDEX(str,/,-1)
- linux默认安装数据库密码是多少,Linux服务器上安装MySql数据库(默认安装,密码为空),首次使用需要修改密码(示例代码)...
- 做自媒体培训赚的盆满钵满
- 组合总和3 leetcode 216
- 【linux运维】linux运维常用工具有哪些?
- ubuntu hadoop安装教程
- MongoDB的安装启动
- Excel K4宏病毒专杀
- IDEA快捷键设置,选择Eclipse风格的快捷键,自动补全快捷键,关闭当前窗口快捷键Ctrl+W 自动导入设置,引入外
- 单片机全局变量 局部变量 堆与栈
- stm32h7内存分配_【STM32H7教程】第9章 STM32H7重要知识点数据类型,变量和堆栈...
- 【报错】WebSocket connection to ‘ws://xxx.xxx.x.xxxx:8080/ws‘failed:
- jzoj P1285 奶酪厂
- [NAS] Synology (群晖) DSM 7.X 挂载NTFS硬盘
- 自己家里的电脑架设传奇外网教程
- 李沐动手学深度学习笔记---含并行连结的网络 GoogLeNet / Inception V3
- ppt怎么压缩文件大小?学会这几种方法
- 换了个地方,来北京工作,面试了4家python爬虫,写一些这四家(记得的)笔试题(2)
- Android多图加载成动画
热门文章
- matlab机械手ikine函数,关于Mtalab-robotics工具箱中的fkine和ikine两个函数的问题讨论!...
- java socket 阻塞模式_(四) 如何将socket设置为非阻塞模式
- 遍历children_589. N叉树的前序遍历
- python logging模块 默认_python logging模块
- PWA将带来新一轮大前端技术洗牌?
- JAVA 取得当前目录的路径/Servlet/class/文件路径/web路径/url地址
- Android的面孔_Actiyity
- 【WebSocket初探 
】
- 马老师 生产环境mysql主从复制、架构优化方案
- 《算法导论》读书笔记之第1章 算法在计算机中的作用