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 旗下产品.由于其体积小.速度快.拥有成本低,尤其是开放源码这一特点,广受各大企业欢迎,包括 ...
随机推荐
- C++继承模型
在C++继承模型中,一个派生类对象表现出来的东西,是其自己的成员加上其基类成员的总和.但这些成员怎样摆放,标准并未强制规定.一般而言,低地址放基类子对象,高地址放派生类对象. 以下从四个部分讨论C++ ...
- ui-select : There is no "X"(delete button) with selectize theme, when allow-clear="true"
but add allow-clear="true"For Bootstrap and Select2 themes, it's working perfectly. reason ...
- Mac打开应用提示已损坏的解决办法
相信很多升级了最新Mac系统的用户在打开一些应用的时候都会出现“应用XX已损坏”的系统提示,安装这些应用的时候总是提示“已损坏,移至废纸篓”这类信息,根本无法打开应用. Mac打开应用提示已损坏的解决 ...
- [React-Native]入门(Hello World)
(1)需要一台Mac(OSX),这个是前提,建议还是入手一本啦. (2)在Mac上安装Xcode,建议Xcode 6.3以上版本 (3)安装node.js:https://nodejs.org/dow ...
- 自适应Simpson公式
参考刘汝佳<算法指南>P163 #include<cstdio> #include<cmath> double a; double F(double x){ +*a ...
- AtCoder Regular Contest 080 E - Young Maids
地址:http://arc080.contest.atcoder.jp/tasks/arc080_c 题目: E - Young Maids Time limit : 2sec / Memory li ...
- cisco anyconnect linux
cisco anyconnect linux 官方的下载需要登录验证,比较麻烦,可以从这个地方直接下载使用.支持ubuntu,centos. cisco anyconnect vpn client我本 ...
- java synchronized关键字的底层实现
每个对象都有一个锁(Monitor,监视器锁),class对象也有锁,如果synchronized关键字修饰同步代码块,通过反编译可以看到,其实是有个monitorenter和monitorexit指 ...
- 简单封装get和jsonp
/** * 向服务器发送GET请求. * * @param {type} url * @param {type} async 是否异步调用 * @param {type} fnCallback 回调 ...
- 用nodejs搭建代理服务器
题图 From 极客时间 From Clm 前端开发者在工作中常常遇到跨域的问题,一般我们遇到跨域问题主要使用以下办法来解决: 1.jsonp 2.cors 3.配置代理服务器. jsonp不是很灵活 ...