1 
 半同步模式原理 
 
 
  1. 
  用户线程写入完成后 
  master 
  中的 
  dump 
  会把日志推送到 
  slave 
  端  
 
 
  
  2.slave 
  中的 
  io 
  线程接收后保存到 
  relaylog 
  中继日志  
 
 
  
  3. 
  保存完成后 
  slave 
  向 
  master 
  端返回 
  ack  
 
 
  
  4. 
  在未接受到 
  slave 
  的 
  ack 
  时 
  master 
  端时不做提交的,一直处于等待当收到 
  ack 
  后提交到存储引擎  
 
 
  
  5. 
  在 
  5.6 
  版本中用到的时 
  after_commit 
  模式, 
  after_commit 
  模式时先提交在等待 
  ack 
  返回后输出 
  ok  
 
 
  
   2.gtid 
   模式 
  
 
   
    当为启用 
    gtid 
    时我们要考虑的问题  
   
 
   - 在master端的写入时多用户读写,在slave端的复制时单线程日志回放,所以slave端一定会延迟与master端
 - 这种延迟在slave端的延迟可能会不一致,当master挂掉后slave接管,一般会挑选一个和master延迟日志最接近的充当新的master
 - 那么为接管master的主机继续充当slave角色并会指向到新的master上,作为其slave
 - 这时候按照之前的配置我们需要知道新的master上的pos的id,但是我们无法确定新的master和slave之间差多少
 

当激活GITD之后
当master出现问题后,slave2和master的数据最接近,会被作为新的master
slave1指向新的master,但是他不会去检测新的master的pos id,只需要继续读取自己gtid_next即可
master主服务器设置gtid模式


在slave上:
启动slave


 
    启用半同步模式  
   
 
    
     在 
     master 
     端配置启用半同步模式 
    
 
     
   
 
    #安装半同步插件 
    
 
   
 
   
 
    
     # 
     查看插件情况  
    
 
   
 
    # 
    打开半同步功能  
   
 
   
 
    # 
    查看半同步功能状态 
   
 
   
在slave端开启半同步功能

 
    # 
    查看半同步功能状态 
   
 
   
 
    # 
    重启 
    io 
    线程,半同步才能生效  
   
 
   



















