介绍

先了解一下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版本半同步主从复制的开启方法的更多相关文章

  1. 关于Mysql5.6半同步主从复制的开启方法【转】

    介绍 先了解一下mysql的主从复制是什么回事,我们都知道,mysql主从复制是基于binlog的复制方式,而mysql默认的主从复制方式,其实是异步复制. 主库实际上并不关心从库是否把数据拉完没有, ...

  2. Mysql的ssl主从复制+半同步主从复制

    Mysql的ssl主从复制+半同步主从复制 准备工作 1.主从服务器时间同步 [root@localhost ~]# crontab -e */30 * * * * /usr/sbin/ntpdate ...

  3. MySQL5.7延迟复制半同步复制

    MySQL5.7延迟复制半同步复制 作者:尹正杰  版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.延迟复制 1>.什么是延迟复制 延迟复制是指定从库对主库的延迟至少是指定的这个间隔时间 ...

  4. MySQL主从复制之半同步模式

    MySQL主从复制之半同步模式 MySQL半同步介绍: 一般情况下MySQL默认复制模式为异步,何为异步?简单的说就是主服务器上的I/O threads 将binlog写入二进制日志中就返回给客户端一 ...

  5. MySQL主从复制之半同步(semi-sync replication)

    GreatSQL社区原创内容未经授权不得随意使用,转载请联系小编并注明来源. 半同步简介 MASTER节点在执行完客户端提交的事务后不是立刻返回结果给客户端,而是等待至少一个SLAVE节点接收并写到r ...

  6. Mysql半同步复制模式说明及配置示例 - 运维小结

    MySQL主从复制包括异步模式.半同步模式.GTID模式以及多源复制模式,默认是异步模式 (如之前详细介绍的mysql主从复制).所谓异步模式指的是MySQL 主服务器上I/O thread 线程将二 ...

  7. MySQL的半同步是什么?

    前言 年后在进行腾讯二面的时候,写完算法的后问的第一个问题就是,MySQL的半同步是什么?我当时直接懵了,我以为是问的MySQL的两阶段提交的问题呢?结果确认了一下后不是两阶段提交,然后面试官看我连问 ...

  8. MySQL-技术专题-MySQL主从架构以及[半同步机制]模式大全

    MySQL的主从复制 一般在大规模的项目上,都是使用MySQL的复制功能来创建MySQL的主从集群的. 主要是可以通过为数据库服务器配置一个或多个备库的方式来进行数据同步. 复制的功能不仅有利于构建高 ...

  9. MySQL 半同步复制+MMM架构

    200 ? "200px" : this.width)!important;} --> 介绍 上篇文章介绍了MMM架构的实现方法,但是上篇文章的MMM方案的复制是异步复制,异 ...

随机推荐

  1. 微信小程序登录状态

    我们知道,WEB服务器通过浏览器携带的cookie获取session来判断是否是同一用户(或浏览器):Restful服务通过客户端传过来唯一ID,来识别调用用户. >为什么需要维护登录态? 有自 ...

  2. Linux下Tomcat开机自动启动

    linux下tomcat开机自动启动有两种方法,一种是简单,一种是复杂而又专业的,使用shell脚本要实现,我们一般推荐shell脚本启动方式.下面我们分别介绍这两种方法. 1.shell脚本启动 众 ...

  3. netsh winsock reset 命令并回车

    1. Win+R 打开运行窗口,输入 CMD 并确认打开命令行窗口.2. 在命令行窗口输入 netsh winsock reset 命令并回车,待提示重启计算机时,重启计算机

  4. 链接加载文件gcc __attribute__ section

    在阅读源代码的过程中,发现一个头文件有引用: /** The address of the first device table entry. */ extern device_t devices[] ...

  5. 生产环境安装centos时的磁盘规划

    一般来说,分区要按照公司领导的要求来执行.但是如果没有要求,一般按照下面的方法进行磁盘规划. /boot分区200M: swap分区分内存的2倍.如果内存大于等于8G,那么swap分8G即可: /分区 ...

  6. pipreqs------查找python项目依赖并生成requirements.txt

    项目开发的时候,总是要搭建和部署环境,这时,就需要一个python第三方包的list,一般叫做requirements.txt.如果项目使用virtualenv环境,直接使用pip freeze即可, ...

  7. 实例解析嵌套的JSON格式数据

    关于JSON数据格式的基本知识和概念,参看: http://www.cnblogs.com/zouzf/archive/2012/03/31/2426646.html <span style=& ...

  8. 【转-记】mysql总结

    1 | 查询所有数据  select * from Info 查所有数据 select Code,Name from Info 查特定列    2 | 根据条件查  select * from Inf ...

  9. CodeFirst模式开发涉及到mysql简单使用

    在和同学写自己的小项目中,这次大胆的用到了“mysql”,毕竟是第一次在项目中使用,可我和同学就犯难了,我们没有真正意义上学过mysql,或者可以说,使用过mysql,当我们把项目放在www.git. ...

  10. swagger (九)

    创建创建microservicecloud-swagger pom文件 eureka: client: #客户端注册进eureka服务列表内 service-url: defaultZone: htt ...