Mysql5.6.x版本半同步主从复制的开启方法
介绍
先了解一下mysql的主从复制是什么回事,我们都知道,mysql主从复制是基于binlog的复制方式,而mysql默认的主从复制方式,其实是异步复制.
主库实际上并不关心从库是否把数据拉完没有,也不关心从库有没有把数据写进硬盘入库,反正数据丢过去,让从库自己慢慢跑,而实际上这也并不影响主库任何使用的情况.
细心的人就会发现,这种情况下,假如主库临时挂了,binlog还没传输完毕,即使是集群也不能保证说这挂了之后的数据一致性,因为你不能排除别人在主库是正常提交的,而从库没有数据的情况.
然后在某个位面的时间上,就有人提出同步复制的概念,意思就是说,只要从库没写入,主库就不返回完成,这个时候即使主库挂了,这也只是一个未完成的事务,从库也不会记录,能保证数据一致性.
看上去,数据一致性是解决了,但是呢,每个事务的延时就增大了,如果是大事务的话,就更惨,这得看网络带宽能不能顶得住,不然延时更低,性能更差.
最后,在mysql5.5之后,半同步就提出来了,意思就是说,每个事务的复制,至少保证一个从库已经收到了binlog,主库才返回事务完成,但不需要理会从库是否写入硬盘.
这样做虽然延时还是有,但是比起完全的同步方式还是好太多,对于数据一致性要求高的情况,牺牲性能来换取一定的价值,是在所难免的.

大家留意上面的数字,
第一部,客户端提交sql语句,
第二部,提交给存储引擎解析并处理数据修改,
第三部,事务在主库处理完毕,处于待完成状态,等待最终完成,
第四部,同时提交给各从库,等待完成,
第五部,从库返回状态给主库,标记已完成,半同步只需要一个从库返回就可以,其他会转成异步
第六部,返回客户端,整个事务已完成.
看上去还是比较不错,主从的数据一致性得到很大的提高,但是延时也不含糊,就是牺牲性能来提高一致性的问题了.
不过我还是得负责任的讲句,在极端的情况下,还是可能会丢一些数据的,所以定期做主从数据校验还是有必要的,例如使用PT工具什么的,至于为什么,这个不仿让大家思考一下,而对于大事务来说,半同步也是比较无力的情况,性能损耗较大.
安装使用
下面来看看如何安装使用半同步,大部分mysql本身并没有预装半同步的组件,需要另外安装,但是一般mysql的包里面会自带so文件,所以只要手动加载一下就可以用了.
安装使用
下面来看看如何安装使用半同步,大部分mysql本身并没有预装半同步的组件,需要另外安装,但是一般mysql的包里面会自带so文件,所以只要手动加载一下就可以用了.
#查找mysql插件目录位置
mysql> show variables like 'plugin_dir';
+---------------+---------------------------------+
| Variable_name | Value |
+---------------+---------------------------------+
| plugin_dir | /roobo/server/mysql/lib/plugin/ |
+---------------+---------------------------------+
1 row in set (0.00 sec)
#查看文件
[root@m2 ~]# cd /roobo/server/mysql/lib/plugin/ [root@m2 plugin]# ll
总用量 1048
-rwxr-xr-x. 1 mysql mysql 16445 5月 8 2017 adt_null.so
-rwxr-xr-x. 1 mysql mysql 25459 5月 8 2017 auth.so
-rwxr-xr-x. 1 mysql mysql 12532 5月 8 2017 auth_socket.so
-rwxr-xr-x. 1 mysql mysql 24544 5月 8 2017 auth_test_plugin.so
-rw-r--r--. 1 mysql mysql 227 5月 8 2017 daemon_example.ini
drwxr-xr-x. 2 mysql mysql 4096 5月 8 2017 debug
-rwxr-xr-x. 1 mysql mysql 38715 5月 8 2017 libdaemon_example.so
-rwxr-xr-x. 1 mysql mysql 17827 5月 8 2017 mypluglib.so
-rwxr-xr-x. 1 mysql mysql 11865 5月 8 2017 mysql_no_login.so
-rwxr-xr-x. 1 mysql mysql 18079 5月 8 2017 qa_auth_client.so
-rwxr-xr-x. 1 mysql mysql 23862 5月 8 2017 qa_auth_interface.so
-rwxr-xr-x. 1 mysql mysql 12934 5月 8 2017 qa_auth_server.so
-rwxr-xr-x. 1 mysql mysql 414708 5月 8 2017 semisync_master.so #有semisync开头的文件,就说明插件安装成功了。
-rwxr-xr-x. 1 mysql mysql 247783 5月 8 2017 semisync_slave.so #有semisync开头的文件,就说明插件安装成功了。
-rwxr-xr-x. 1 mysql mysql 168184 5月 8 2017 validate_password.so
#看到下面两个,就是半同步的组件了,一个是主库组件,一个是从库组件,你可以两个都装上或者只装一个.
semisync_master.so
semisync_slave.so
#下面开始正式安装:
#在主库上执行
mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';
mysql> show plugins;
#看到下面这个就证明成功了
rpl_semi_sync_master | ACTIVE | REPLICATION | semisync_master.so | GPL
#从库当然也要做
#然后在从库执行
mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
mysql> show plugins;
#看到下面这个就证明成功了
rpl_semi_sync_slave | ACTIVE | REPLICATION | semisync_slave.so | GPL
安装完了,就开始准备启动了,
主库很简单,只要设置一下半同步启动就可以了.
mysql> set global rpl_semi_sync_master_enabled = on;
当然,你也可以写到配置文件,不过写到配置文件要重启才生效,而且还要重新加载组件,所以这就没意思了.
然后到从库,slave要重启动IO线程来生效,否则还是异步的方式复制数据。
mysql> set global rpl_semi_sync_slave_enabled = on;
mysql> stop slave IO_THREAD;
mysql> start slave IO_THREAD;
同样你也能写到配置文件,我就不多说了,反正这就启动完毕了.
下面来验证一下是否成功,以下是主库的信息,因为从库很多信息是没有的.
来看看我们能设置些什么关于半同步的参数
mysql> show variables like '%Rpl%';
+------------------------+----------+
| Variable_name | Value |
+------------------------+----------+
| rpl_stop_slave_timeout | 31536000 |
+------------------------+----------+
1 row in set (0.00 sec)
更多详细情况参考:
https://www.cnblogs.com/paul8339/p/8177683.html
https://www.cnblogs.com/abobo/p/4242417.html (备注:这个介绍的更详细)
other:
主从复制参考:
http://www.cnblogs.com/agileai/p/6126823.html
Mysql5.6.x版本半同步主从复制的开启方法的更多相关文章
- 关于Mysql5.6半同步主从复制的开启方法【转】
介绍 先了解一下mysql的主从复制是什么回事,我们都知道,mysql主从复制是基于binlog的复制方式,而mysql默认的主从复制方式,其实是异步复制. 主库实际上并不关心从库是否把数据拉完没有, ...
- Mysql的ssl主从复制+半同步主从复制
Mysql的ssl主从复制+半同步主从复制 准备工作 1.主从服务器时间同步 [root@localhost ~]# crontab -e */30 * * * * /usr/sbin/ntpdate ...
- MySQL5.7延迟复制半同步复制
MySQL5.7延迟复制半同步复制 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.延迟复制 1>.什么是延迟复制 延迟复制是指定从库对主库的延迟至少是指定的这个间隔时间 ...
- MySQL主从复制之半同步模式
MySQL主从复制之半同步模式 MySQL半同步介绍: 一般情况下MySQL默认复制模式为异步,何为异步?简单的说就是主服务器上的I/O threads 将binlog写入二进制日志中就返回给客户端一 ...
- MySQL主从复制之半同步(semi-sync replication)
GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 半同步简介 MASTER节点在执行完客户端提交的事务后不是立刻返回结果给客户端,而是等待至少一个SLAVE节点接收并写到r ...
- Mysql半同步复制模式说明及配置示例 - 运维小结
MySQL主从复制包括异步模式.半同步模式.GTID模式以及多源复制模式,默认是异步模式 (如之前详细介绍的mysql主从复制).所谓异步模式指的是MySQL 主服务器上I/O thread 线程将二 ...
- MySQL的半同步是什么?
前言 年后在进行腾讯二面的时候,写完算法的后问的第一个问题就是,MySQL的半同步是什么?我当时直接懵了,我以为是问的MySQL的两阶段提交的问题呢?结果确认了一下后不是两阶段提交,然后面试官看我连问 ...
- MySQL-技术专题-MySQL主从架构以及[半同步机制]模式大全
MySQL的主从复制 一般在大规模的项目上,都是使用MySQL的复制功能来创建MySQL的主从集群的. 主要是可以通过为数据库服务器配置一个或多个备库的方式来进行数据同步. 复制的功能不仅有利于构建高 ...
- MySQL 半同步复制+MMM架构
200 ? "200px" : this.width)!important;} --> 介绍 上篇文章介绍了MMM架构的实现方法,但是上篇文章的MMM方案的复制是异步复制,异 ...
随机推荐
- bzoj 1901 线段树套平衡树+二分答案查询
我们就建一颗线段树,线段树的每一个节点都是一颗平衡树,对于每个询问来说,我们就二分答案, 查询每个二分到的mid在这个区间里的rank,然后就行了 /************************* ...
- C# 从服务器下载文件
一.//TransmitFile实现下载 protected void Button1_Click(object sender, EventArgs e) { /* 微软为Response对象提供了一 ...
- [Leetcode Week1]Longest Substring Without Repeating Characters
Longest Substring Without Repeating Characters题解 原创文章,拒绝转载 题目来源:https://leetcode.com/problems/longes ...
- css3带你实现酷炫效果
css3 私有前缀 -webkit- chrome/safari等webkit内核浏览器 -moz- firfox -o- opera -ms- IE css3 盒子模型 box-sizing 值co ...
- js中如何对时间进行设置
js中如何对时间进行设置 Js获取当前日期时间及其它操作var myDate = new Date();myDate.getYear(); //获取当前年份(2位)myDate.getF ...
- cpu中的缓存和操作系统中的缓存分别是什么?
cpu中的缓存和操作系统中的缓存分别是什么? 在操作系统中,为了提高系统的存取速度,在地址映射机制中增加了一个小容量的联想寄存器,即块表.用来存放当前访问最频繁的少数活动页面的页数.当某用户需要存取数 ...
- 怎么在32位windows系统上搭建爬虫框架scrapy?
禁止转载: 自学python,然后搭建爬虫框架scrapy.费了我一上午的心血.终于搭建成功,以防以后忘记搭建流程,特此撰写此贴,开写 ******************************** ...
- Spring:基于注解的依赖注入的使用
1.什么是pojo?什么是bean? 首先,在之前几篇Spring的介绍文章当中,自己都提到了一个名词叫做POJO类,但是在回顾Spring的注解的使用的时候,去形容java当中的对象还有一个名词是叫 ...
- 让webstorm 识别vue cli3项目中的@路径别名
在setting -> languages&frameworks -> webpack里选择配置文件路径为 node_modules/@vue/cli-service/webpac ...
- Codeforces 810 A.Straight «A»
A. Straight «A» time limit per test 1 second memory limit per test 256 megabytes input standard in ...