MySQL5.7 半同步复制
一、概述
5.5与5.7的半同步复制可能存在差异,从MySQL5.5开始,MySQL以插件的形式支持半同步复制
异步:默认情况下,MySQL复制是异步的。主库在执行完客户端提交的事务后会立即将结果返给给客户端,并不关心从库是否已经接收并处理。此时若是主若是崩溃了,那提交完成的事务可能并没有传到从上,从而导致数据不一致。
全同步:当主库执行完接受到的事务,会等待所有从机执行此事务的返回值,当收到所有从机的返回值时才会返回给客户端。所以对性能的影响严重。
半同步:介于以上两者之间,主库在执行完客户端的事务后,会等待至少一个从机接收到并写入relay log中才会返回给客户端。它提高了数据的安全性, 也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。
relay log中继日志:在salve中IO线程会拉去master的二进制到relay log中,然后SQL线程会读取relay-log日志的内容并应用到从服务器。
两个插件实现半同步功能。主端有一个插件,从端有一个插件。
半同步复制必须在主和从都有启用,否则使用异步复制。
只有事件写入中继日志并且刷新到磁盘后,从设备才会确认收到事务的事件。
如果无任何从服务器确认事务的情况下发生超时,主服务器将恢复异步复制。当至少一个半同步丛机赶上,主机将返回到半同步复制。
After_commit(5.6缺省值)
Master将事务写进binlog日志中,传递到slave刷新到relay_log,同时master提交事务。Master等待slave反馈写入了relay log,只有收到sck包后master才会将commit ok结果反馈给客户端
After_sync(5.7缺省值)
master将事务写进binlog中,传到slave刷新到磁盘relay log。Master等待slave收到ack包之后,再提交事务并且返回commit ok结果给客户端,这样即使主库宕机了,也可以保证所有主库上的书屋都已经同步到了slave的relay log上去。
二、半同步复制配置
1.)安装相关插件
master: --安装 semisync_master.so插件
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
slave: --安装 semisync_slave.so插件
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
查看是否安装插件:
mysql> SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';
+------------------------------+-------------------------+
| PLUGIN_NAME | PLUGIN_STATUS |
+------------------------------+-------------------------+
| rpl_semi_sync_master | ACTIVE |
+------------------------------+------------------------ +
2.默认情况下它是禁用的。主端和从端都必须启用插件才能启用半同步复制
开启方式:
1.)更改变量:
master:
SET GLOBAL rpl_semi_sync_master_enabled = {0|1}; #1来启用半同步复制,0来禁用它
SET GLOBAL rpl_semi_sync_master_timeout = N; #该值N以毫秒为单位给出。默认值是10000(10秒)
slave:
SET GLOBAL rpl_semi_sync_slave_enabled = {0|1};
2.)修改配置文件:
[mysqld]
rpl_semi_sync_master_enabled = 1
...
......
如果是在运行的的从站上启用半同步复制,则需要重启I/O线程,使从站重新连接主并注册为半同步丛站。
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;
3.监控半同步复制
mysql> SHOW VARIABLES LIKE 'rpl_semi_sync%';
+-------------------------------------------+------------+
| Variable_name | Value |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled | ON |
| rpl_semi_sync_master_timeout | |
| rpl_semi_sync_master_trace_level | |
| rpl_semi_sync_master_wait_for_slave_count | |
| rpl_semi_sync_master_wait_no_slave | ON |
| rpl_semi_sync_master_wait_point | AFTER_SYNC |
+-------------------------------------------+------------+
rows in set (0.00 sec)
mysql> SHOW STATUS LIKE 'Rpl_semi_sync%';
+--------------------------------------------+-------+
| Variable_name | Value |
+--------------------------------------------+-------+
| Rpl_semi_sync_master_clients | | 有多少个Semi-sync的备库
| Rpl_semi_sync_master_net_avg_wait_time | | 事务提交后,等待备库响应的平均时间
| Rpl_semi_sync_master_net_wait_time | | 等待网络响应的总次数
| Rpl_semi_sync_master_net_waits | | 总的网络等待时间
| Rpl_semi_sync_master_no_times | | 一共有几次从Semi-sync跌回普通状态
| Rpl_semi_sync_master_no_tx | | 库未及时响应的事务数,如果这个值很大就有问题
| Rpl_semi_sync_master_status | ON | 主库上Semi-sync是否正常开启
| Rpl_semi_sync_master_timefunc_failures | | 时间函数未正常工作的次数
| Rpl_semi_sync_master_tx_avg_wait_time | | 开启Semi-sync,事务返回需要等待的平均时间
| Rpl_semi_sync_master_tx_wait_time | | 事务等待备库响应的总时间
| Rpl_semi_sync_master_tx_waits | | 事务等待备库响应的总次数
| Rpl_semi_sync_master_wait_pos_backtraverse | | 改变当前等待最小二进制日志的次数
| Rpl_semi_sync_master_wait_sessions | | 当前有几个线程在等备库响应
| Rpl_semi_sync_master_yes_tx | | Semi-sync模式下,成功的事务数
+--------------------------------------------+-------+
rows in set (0.00 sec)
MySQL5.7 半同步复制的更多相关文章
- 【可靠性】Mysql 5.7 降低了半同步复制-数据丢失的风险
如果你的生产线开启了半同步复制,那么对数据的一致性会要求较高,但在MySQL5.5/5.6里,会存在数据不一致的风险.有这么一个场景,客户端提交了一个事务,master把binlog发送给slave, ...
- MySQL5.7延迟复制半同步复制
MySQL5.7延迟复制半同步复制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.延迟复制 1>.什么是延迟复制 延迟复制是指定从库对主库的延迟至少是指定的这个间隔时间 ...
- Centos7.5部署MySQL5.7基于GTID主从复制+并行复制+半同步复制+读写分离(ProxySQL) 环境- 运维笔记 (完整版)
之前已经详细介绍了Mysql基于GTID主从复制的概念,原理和配置,下面整体记录下MySQL5.7基于GTID主从复制+并行复制+增强半同步复制+读写分离环境的实现过程,以便加深对mysql新特性GT ...
- 配置mysql5.5主从复制、半同步复制、主主复制
mysql主服务器 192.168.8.40 mysql从服务器 192.168.8.41 全新配置过程(主和从数据库都没有数据): 主从复制主服务器设置: 1.改server-id 2.启 ...
- Mysql5.7的gtid主从半同步复制和组复制
(一)gtid主从半同步复制 一.半同步复制原理 mysql默认的复制是异步的,主库在执行完客户端提交的事务后会立即将结果返回给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题,主库如果cr ...
- MySQL半同步复制
从MySQL5.5开始,MySQL以插件的形式支持半同步复制.如何理解半同步呢?首先我们来看看异步,全同步的概念 异步复制(Asynchronous replication) MySQL默认的复制即是 ...
- MySQL数据的主从复制、半同步复制和主主复制详解
一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...
- MySQL数据的主从复制、半同步复制和主主复制详解-转
一.MySQL复制概述 ⑴.MySQL数据的复制的基本介绍 目前MySQL数据库已经占去数据库市场上很大的份额,其一是由于MySQL数据的开源性和高性能,当然还有重要的一条就是免费~不过不知道还能免费 ...
- MySQL半同步复制的数据一致性探讨微信后台团队实践【转】
MySQL是一个RDBMS(关系型数据库管理系统),由瑞典MySQL AB 公司开发,目前属于 Oracle 旗下产品.由于其体积小.速度快.拥有成本低,尤其是开放源码这一特点,广受各大企业欢迎,包括 ...
随机推荐
- python web框架 django wsgi 理论
django wsgi python有个自带的wsgi模块 可以写自定义web框架 用wsgi在内部创建socket对象就可以了 自己只写处理函数就可以了django只是web框架 他也不负责写soc ...
- Spark2.0机器学习系列之5:随机森林
概述 随机森林是决策树的组合算法,基础是决策树,关于决策树和Spark2.0中的代码设计可以参考本人另外一篇博客: http://www.cnblogs.com/itboys/p/8312894.ht ...
- NGS中的一些软件功能介绍
1.bowtie 短序列比对工具,blast也是短序列比对工具,速度快,结果易理解. 输入可以是fastq或者fasta文件. 生成比对结果文件sam格式的吧. 2.bwa 转自:https://ww ...
- RF的优缺点
随机森林有什么优点,如: a. 对于很多数据集表现良好,精确度比较高: b. 不容易过拟合: c. 可以得到变量的重要性排序: d. 既能处理离散型数据,也能处理连续型数据,且不需要进行归一化处理: ...
- ActiveRecord多数据库配置
ActiveRecord 的多数据库配置基本沿袭了 NHibernate 的思想,只不过在配置文件结构上作了些调整.NHibernate的配置也是基于配置得来的,配置多个SessionFactory传 ...
- dev-server.js详解
转载自:https://www.cnblogs.com/ye-hcj/p/7091706.html dev-server.js详解 require('./check-versions')() var ...
- JavaScript-dom1
获取事件源 var div = document.getElementById("box"); // var arr1 = document.getElementsByTagNam ...
- Winter-1-B Sum 解题报告及测试数据
Time Limit:500MS Memory Limit:32768KB Description Hey, welcome to HDOJ(Hangzhou Dianzi University O ...
- android 如何获取当前的Activity类名
比如友盟统计页面停留时间,咱们需要知道当前页面停留了多久. 一般我们都有一个父类Activity,用下面的方法可以获得完整的包名.类名结构 this.getLocalClassName() 输出如下: ...
- NC学习笔记
NC基础技术 一.NC开发基本概念 1.单据:一般是由表头,表体,表位组成. 表头:一般是一些主信息,例如日期,项目等 ...