当前位置: 首页 > news >正文

MySQL半同步复制

 

1、半同步复制简介

  何为半同步复制模式呢?在此我们先了解异步复制模式,这是MySQL的默认复制选项。异步复制即是master数据库把binlog日志发送给slave数据库,然后就没有了然后了。在此暴露一个问题,当slave服务器发生故障了,那么肯定会导致主从数据库服务器的数据不一致。

  为了解决上面的问题,MySQL5.5引入一种叫做半同步复制模式。开启这种模式,可以保证slave数据库接收完master数据库发送过来的binlog日志并写入自己的中继日志中,然后反馈给master数据库,告知已经复制完毕。

  开启这种模式后,当出现超时,主数据库将会自动转为异步复制模式,直到至少有一台从服务器接受到主数据库的binlog,并且反馈给主数据库。这时主数据库才会切换回半同步复制模式。

注意:

半同步复制模式必须在主服务器和从服务器同时中开启,否则将会默认为异步复制模式。

2、环境说明

  两台linux虚拟主机

  Linux版本CentOS6.6、MySQL 5.5

  ip:192.168.95.11(主)、192.168.95.12(从)

3、安装与配置

  3.1、安装前提

    1、必须是MySQL5.5或者以上

    2、MySQL必须有自动加载功能,即have_dynamic_loading变量为YES(因为我们是在MySQL里面来加载安装这个功能插件)

       show variables like 'have_dynamic_loading';  #检查是否具有自动加载功能

    3、主从复制已经配置好,并且已经ing工作着的。

      主从复制配置教程:http://www.cnblogs.com/phpstudy2015-6/p/6485819.html

  3.2、安装

    192.168.95.11加载安装:

1 mysql>install plugin rpl_semi_sync_master soname 'semisync_master.so';
2 
3 mysql>show plugins;   #查看是否加载成功
4 
5 mysql>SET GLOBAL rpl_semi_sync_master_enabled = 1;  #开启半同步复制,默认是关闭的

    192.168.95.12加载安装

 1 mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
 2 
 3 mysql>show plugins;   #查看是否加载成功
 4 
 5 mysql>SET GLOBAL rpl_semi_sync_slave_enabled = 1;  #开启半同步复制,默认是关闭的
 6 
 7 #重启从服务器IO线程,手动将异步模式切换为半同步模式
 8 
 9 mysql>STOP SLAVE IO_THREAD;
10 
11 mysql>START SLAVE IO_THREAD;

 

  3.3、配置文件

1 rpl_semi_sync_master_enabled=1  #主库配置文件添加,表示以后启动MySQL将会自动开启半同步复制
2 
3 rpl_semi_sync_slave_enabled=1  #从库配置文件添加,同上

4、查看相关参数

  1、主从执行命令show variables like '%semi%';

  master:

  Rpl_semi_sync_master_enabled=ON表示开启半同步复制

  Rpl_semi_sync_master_timeout=1000默认1000毫秒,即10秒超时,将切换为异步复制

  Rpl_semi_sync_master_wait_no_slave表示是否允许master每个事物都要等待slave接收确认,默认为ON

  Rpl_semi_sync_master_trace_level=32表示用于开启半同步复制时的调试级别,默认32

  slave:

  Rpl_semi_sync_slave_enabled=ON表示在slave已经开始半同步复制模式

  Rpl_semi_sync_slave_trace_level=32表示用于开启半同步复制时的调试级别,默认32

  2、主从执行命令show status like '%semi%';

  master

  Rpl_semi_sync_master_status表示主服务器使用是异步还是半同步复制

  Rpl_semi_sync_master_client表示从服务器有多少个配置成半同步复制

  Rpl_semi_sync_master_yes_tx表示从服务器确认成功提交的数量

  Rpl_semi_sync_master_no_tx表示从服务器确认失败提交的数量

  slave:

  Rpl_semi_sync_slave_status表示从服务器开启半同步复制

5、测试

  模拟slave挂掉,master等待10s仍没接收到反馈信号,则转为异步复制模式,继续执行

  首先同步创建数据库aa

  1、slave执行stop slave;关闭主从复制

  2、master在aa数据库中创建表tab1,没接收到反馈信号,等待十秒后(Rpl_semi_sync_master_timeout=1000等待超时),继续执行

    master:

    

    slave:

    

  3、master在数据库中再创建tab2,不需要等待反馈,直接执行

   【当反馈超时时,master将切换到异步复制模式。此时是异步模式,不需要等待】

    

  4、slave执行start slave,数据开始同步,建立tab1、tab2,反馈给master,并切换为半同步复制

   

  5、slave执行stop slave;关闭主从复制

  6、master在数据库中创建表tab3,此时需要等待10s,接收slave反馈信号;等待超时,切换为异步复制模式,继续执行

   【步骤4时,数据同步已经反馈给master,此时master已经是半同步复制模式】

   

6、总结

  半同步复制模式的性能和并发比异步复制模式低的,因为每次复制都要进行反馈,相比之下多了一个步骤。

  说实话我还是不太明白为什么半同步复制就可以保持数据的完整性呢?若是slave挂了,master还不是变回异步复制。和之前的全异步没什么区别。还有就是即使多了个信息反馈,但是反馈回来除了让master确认还有什么作用?假若slave挂了,没有反馈信息,那master还是没什么进一步的处理方法呀。

  毕竟我还是个小白,对mysql了解还不够深吧,若有大神知道的,请求指点指点。

 

转载:http://www.cnblogs.com/phpstudy2015-6/p/6525275.html

 

转载于:https://www.cnblogs.com/fps2tao/p/7689165.html

相关文章:

  • 通过ldap验证svn服务
  • codevs 2620 战壕
  • vue-cli脚手架安装
  • keil 赋值之后再声明变量提示错误error: #268: declaration may not appear after executable statement in block...
  • 正质因数分解
  • 110. Balanced Binary Tree
  • 进程与fork()、wait()、exec函数组
  • Centos_linux系统的区别及实际查看
  • 给Extjs的window弹窗的关闭事件添加验证
  • mysql导入存储过程
  • 系统键盘按钮keyCode大全
  • while(*i++=*t++)都做了些什么。
  • 用call和ret实现子程序
  • 求二叉树高度
  • spring整合javaweb(第二版)
  • 自己简单写的 事件订阅机制
  • “寒冬”下的金三银四跳槽季来了,帮你客观分析一下局面
  • canvas绘制圆角头像
  • PAT A1120
  • SSH 免密登录
  • Vue源码解析(二)Vue的双向绑定讲解及实现
  • 从输入URL到页面加载发生了什么
  • 代理模式
  • 排序算法之--选择排序
  • 如何编写一个可升级的智能合约
  • 如何选择开源的机器学习框架?
  • 突破自己的技术思维
  • 文本多行溢出显示...之最后一行不到行尾的解决
  • 我的业余项目总结
  • 消息队列系列二(IOT中消息队列的应用)
  • 学习笔记TF060:图像语音结合,看图说话
  • ​LeetCode解法汇总2670. 找出不同元素数目差数组
  • ( )的作用是将计算机中的信息传送给用户,计算机应用基础 吉大15春学期《计算机应用基础》在线作业二及答案...
  • (动手学习深度学习)第13章 计算机视觉---图像增广与微调
  • (转)linux 命令大全
  • .mkp勒索病毒解密方法|勒索病毒解决|勒索病毒恢复|数据库修复
  • .MSSQLSERVER 导入导出 命令集--堪称经典,值得借鉴!
  • .NET Core中的去虚
  • .Net IE10 _doPostBack 未定义
  • .NET/C# 使窗口永不获得焦点
  • .NET简谈设计模式之(单件模式)
  • /etc/apt/sources.list 和 /etc/apt/sources.list.d
  • /proc/interrupts 和 /proc/stat 查看中断的情况
  • @RequestBody的使用
  • @RequestMapping-占位符映射
  • [2015][note]基于薄向列液晶层的可调谐THz fishnet超材料快速开关——
  • [2019/05/17]解决springboot测试List接口时JSON传参异常
  • [Android] Android ActivityManager
  • [BZOJ3223]文艺平衡树
  • [C/C++]数据结构 循环队列
  • [C++] sqlite3_get_table 的使用
  • [C++] 默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数及其使用案例
  • [cogs2652]秘术「天文密葬法」
  • [hive] posexplode函数
  • [iOS]GCD(一)