先来了解下同步复制和异步复制的概念:

同步复制:
客户端提交事务,首先会在主服务器数据区域中存储下来,而后事件再写入到二进制日志中,同时,主服务器上的二进制日志文件要写入到从服务器中的中继日志中去,并且由从服务器上的sql thread在本地执行一遍,保存到自己的数据区域,然后通知主服务器同步完成,主服务器再响应给客户端 ,这种机制耗费时间较长,会造成服务器性能降低;
异步复制:
客户端提交一个新事务,它只要记录到二进制日志文件中就会立即响应给客户端,至于从服务器是否将数据同步过去了,它不做关心,而是由从服务器自身通过各种机制将数据同步;
而在mysql主从复制模型下,主从服务器是异步复制的,也就是说,主服务器在发送给从服务器新的事务后,是不会关心从服务器是否同步的进度的,假如说,用户请求的事务过多,从服务器复制滞后于主服务器,而这个时候恰好主服务器crash(宕机)了,就会导致从服务器所复制的数据不完整,那么这个时候,我们就无法通过从服务器来恢复数据了!!
而半同步复制在一定程度上解决了这个问题,它通过google补丁,可以在主从服务器中安装对应的插件,以实现半同步的机制(对应插件在安装mysql的的库目录下);
半同步的工作机制和同步一样,是等到从服务器将同步过来的数据在本地存储之后,通知给主服务器,主服务器再响应给客户端;这种机制和同步又不同,当它应用在一主多从的模型中,只要有一台从服务器将数据存储成功,通知给主服务器,主服务器就会响应给客户端了,还可以通过设置从通知主的超时时间,如果从服务器超过了通知时间,会自动降级为异步模式;
半同步复制配置:
环境:
Red Hat Enterprise Linux Server release 5.8 
主服务器:IP : 172.16.9.1    
从服务器:IP :172.16.9.2
mysql版本:mysql-5.5.28
Master
  1. vim /etc/my.cnf
  2. datadir=/data/mydata
  3. server-id = 1
  4. log-bin = /bin/log/mysql-bin
  5. sync_binlog = 1
启动服务
  1. service mysqld start
进入数据库
  1. mysql> grant replication client,replication slave on *.* to 'rpuser'@'172.16.9.2' identified by 'redhat';
  2. mysql> flush privileges;
  3. mysql> install plugin rpl_semi_sync_master soname 'semisync_master.so';  #为主服务器安装插件
  4. mysql> set global rpl_semi_sync_master_enabled=1;  #设定启用半同步机制
  5. mysql> set global rpl_semi_sync_master_timeout=1000;  #设定通知的超时时间,单位是毫秒,这里设置为1秒
  6. mysql> show master status;  #记录二进制文件以及所在位置
  7. +------------------+----------+--------------+------------------+
  8. | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
  9. +------------------+----------+--------------+------------------+
  10. | mysql-bin.000004 |      354 |              |                  |
  11. +------------------+----------+--------------+------------------+
  12. 1 row in set (0.00 sec)
Slave
  1. vim /etc/my.cnf
  2. datadir = /data/mydata
  3. server-id = 5
  4. relay-log = /relaylog/mysql-relay  #开启中继日志功能
  5. relay-log-index = /relaylog/mysql-relay.index   #开启中继日志的索引功能
  6. read-only = 1          #只读功能
  7. #bin-log = mysql-bin   #关闭二进制日志功能
开启服务
  1. service mysqld start
进入数据库,设定其主服务器
  1. mysql> change master to  master_host='172.16.9.1', master_user='reuser', master_password='reuser', master_port=3306, master_log_file='mysql-bin.000004', master_log_pos=354;
  2. mysql> install plugin rpl_semi_sync_slave soname 'semisync_slave.so';
  3. mysql> set global rpl_semi_sync_slave_enabled=1;  #开启半同步机制
  4. mysql> start slave;
  5. mysql> show slave status\G;
  6. *************************** 1. row ***************************
  7. Slave_IO_State: Waiting for master to send event
  8. Master_Host: 172.16.9.1
  9. Master_User: reuser
  10. Master_Port: 3306
  11. Connect_Retry: 60
  12. Master_Log_File: mysql-bin.000004
  13. Read_Master_Log_Pos: 354
  14. Relay_Log_File: mysql-relay.000011
  15. Relay_Log_Pos: 500
  16. Relay_Master_Log_File: mysql-bin.000004
  17. Slave_IO_Running: Yes
  18. Slave_SQL_Running: Yes
  19. …………………………………………………………………………………………………………………………………………
以上在mysql中的变量操作只是临时生效,如果想让其永久生效,可以将其写入到主配置文件中;
Master
  1. vim /etc/my.cnf
  2. 在[mysqld]字段中添加
  3. rpl_semi_sync_master_enabled=1
  4. rpl_semi_sync_master_timeout=1000
Slave
  1. 在[mysqld]字段中添加
  2. rpl_semi_sync_slave_enabled=1
在主从服务器上各自重启mysqld服务,即可生效
查看半同步机制是否生效:
Master

以上变量中clients选项中值为1,说明半同步构建成功!!
Slave

从服务器端状态也为ON,主从半同步复制构建成功!!
如果你在主服务器中操作了一些需要同步的语句,一些和同步等待时间的变量值就会改变的。。
如图:

至此,半同步主从复制完成!!

转载于:https://blog.51cto.com/90112526/1079766

MySQL复制篇之---半同步复制相关推荐

  1. mysql半备份_MySQL半同步复制与增强半同步复制详解及安装

    一.基础 1.目前MySQL主要有三种复制方式 1)异步复制 2)半同步复制 3)增强半同步复制 推荐使用:对性能要求较高的推荐使用异步复制 ,如果运行的金融类业务推荐使用增强半同步复制,并使用ROW ...

  2. MySQL多实例实现半同步复制

    MySQL多实例实现半同步复制 MySQL多实例实现半同步复制 主库1:192.168.40.150 主库2:192.168.40.161 从库(2个MySQL实例):192.168.40.162 一 ...

  3. Mysql增强半同步模式_MySQL半同步复制与增强半同步复制详解及安装

    一.基础 1.目前MySQL主要有三种复制方式 1)异步复制 2)半同步复制 3)增强半同步复制 推荐使用:对性能要求较高的推荐使用异步复制 ,如果运行的金融类业务推荐使用增强半同步复制,并使用ROW ...

  4. mysql复制多行_mysql中的复制方式总结(半同步复制,并行复制,多源复制)

    一.MySQL主从复制(异步复制,默认) Mysql主从复制原理 Mysql的复制原理大致如下: 1.主库记录binlog日志 在每次准备提交事务完成数据更新前,主库将数据更新的事件记录到二进制日志b ...

  5. percona mysql.cnf_Percona MySQL5.6 半同步复制

    先配置普通的clone 两台服务器,一主一备 主服务器: 10.10.1.30 Slave: 10.10.1.200 修改每台机器的my.cnf文件,分别修改server_id 主服务器server_ ...

  6. mysql semisync 恢复_mysql半同步复制(semi_sync_replication)搭建及使用

    mysql半同步复制(semi_sync_replication)搭建及使用 google为mysql开发了一个补丁一个基于半同步的补丁,应用与mysql5.0.回来mysql打上了该补丁,并在5.5 ...

  7. mysql的主从复制和半同步复制的配置

    主从复制: 其实就是复制的是主服务器的二进制日志,从服务器然后再重新根据日志操作一遍,从而达到和主服务器里的数据一样,但是时间上会有延迟 mysql主从复制的基本原理 官方文档:https://dev ...

  8. Mysql原理、主从复制、半同步复制及基于SSL复制

    本篇博文主要讲解Mysql主从复制.半同步.基于SSL加密的复制 简介 MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司.MySQL被广泛地应用在Internet上 ...

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

    介绍 上篇文章介绍了MMM架构的实现方法,但是上篇文章的MMM方案的复制是异步复制,异步复制的主要问题在于当主从存在延时时如果主机出现了故障导致了主从切换时这时将会存在数据丢失:mysql为了解决异步 ...

  10. MHA-结合MySQL半同步复制高可用集群(Centos7)

    目录 一.理论概述 本案例部署思路 二.环境 三.部署 部署MHA 部署二进制包MySQL及部署主从复制 部署半同步复制 配置MHA MHA测试 部署lvs+keepalived(lvs1,lvs2) ...

最新文章

  1. 下面属于java的object_在JAVA中,下列哪些是Object类的方法()
  2. android cts测试二
  3. 新站SEO优化五点注意事项!
  4. 页面引用CSS和Javascript时,内联和外置的区别
  5. iphone7参数_来自iPhone8用户的真实体验---这次我们不谈参数,只聊体验
  6. CVS Branch 和 Merge 在 Eclipse 中的使用
  7. win64环境下的一些配置
  8. svd降维 python案例_菜菜的机器学习sklearn实战-----sklearn中的降维算法PCA和SVD
  9. 多重背包问题以及二进制优化
  10. 深度学习在医学影像中的研究进展及发展趋势
  11. JAVA maven Spring 开发 webservice 步骤
  12. iOS开发篇——C++函数模板介绍
  13. 水下清淤机器人_国产第五代箱涵清淤机器人真机亮相上海城市管网展恒通环境展位...
  14. 【数学建模】模糊数学模型详解
  15. opencv2.4.9 + vc2012配置过程记录
  16. 蜗牛连珠五子棋改进版
  17. 关于RC电路特点以及几种常见的典型应用
  18. Android dex2oat命令参数解释
  19. Win11输入法的选字框不见了怎么办?
  20. python 成语接龙1-爬去四字成语

热门文章

  1. Python的矩阵分块
  2. IDEA连接服务器执行python程序
  3. 2018_09_21_刚才发现csdn漏掉了我的上一篇日记
  4. Nodejs自带模块querystring的使用简介
  5. 【2016-2017 ACM-ICPC, Egyptian Collegiate Programming Contest (ECPC 16) A】The game of Osho【SG函数+找规律】
  6. Support Vector Machine's Large Margin
  7. 监控延迟严重怎么解决_监控画面故障解决:网络监控画面没有图像显示或无视频信号怎么办...
  8. 刷题记录 CF每日一题打卡 2020.5月26-6月2
  9. Android studio 报错 Gradle sync failed 你的主机中的软件中止了一个已建立的连接
  10. 使用roboware创建工作空间