目录

一、MySQL主从复制的三种同步模式

1.异步复制(Asynchronous replication)

2.全同步复制(Fully synchronous replication)

3.半同步复制(Semisynchronous replication)

二、半同步复制配置

三、半同步复制转为异步复制的情况

四、使用半同步复制注意点


一、MySQL主从复制的三种同步模式

1.异步复制(Asynchronous replication)

 MySQL默认的复制即是异步的,主库在执行完客户端提交的事务后会立即将结果返给客户端,并不关心从库是否已经接收并处理,这样就会有一个问题:主如果crash掉了,此时主上已经提交的事务可能并没有传到从上,如果此时,强行将从提升为主,可能导致新主上的数据不完整。

2.全同步复制(Fully synchronous replication)

指当主库执行完一个事务,所有的从库都执行了该事务才返回给客户端。因为需要等待所有从库执行完该事务才能返回,所以全同步复制的性能必然会收到严重的影响。

3.半同步复制(Semisynchronous replication)

介于异步复制和全同步复制之间,主库在执行完客户端提交的事务后不是立刻返回给客户端,而是等待至少一个从库接收到并写到relay log中才返回给客户端。相对于异步复制,半同步复制提高了数据的安全性,同时它也造成了一定程度的延迟,这个延迟最少是一个TCP/IP往返的时间。所以,半同步复制最好在低延时的网络中使用。

二、半同步复制配置

主数据库配置

vim /etc/my.cnf                #在 [mysqld] 区域添加下面内容
......
#加载mysql半同步复制的插件
plugin-load=rpl_semi_sync_master=semisync_master.so
#或者设置为"1",即开启半同步复制功能
rpl_semi_sync_master_enabled=ON
#超时时间为1000ms,即1s
rpl-semi-sync-master-timeout=1000                    #重启服务
systemctl restart mysqld        

从数据库配置

vim /etc/my.cnf    ......
#这是是slave
plugin-load=rpl_semi_sync_slave=semisync_slave.so
rpl_semi_sync_slave_enabled=ONsystemctl restart mysqld

查看半同步是否在运行

#主数据库执行
show status like 'Rpl_semi_sync_master_status';
show variables like 'rpl_semi_sync_master_timeout';
#从数据库执行(此时可能还是OFF状态,需要在下一步重启IO线程后,从库半同步状态才会为ON)
show status like 'Rpl_semi_sync_slave_status';#重启从数据库上的IO线程
STOP SLAVE IO_THREAD;
START SLAVE IO_THREAD;#在主库查询半同步状态
show status like '%Rpl_semi%';    

Rpl_semi_sync_master_clients                      #半同步复制客户端的个数
Rpl_semi_sync_master_net_avg_wait_time            #平均等待时间(默认毫秒)
Rpl_semi_sync_master_net_wait_time                #总共等待时间
Rpl_semi_sync_master_net_waits                    #等待次数
Rpl_semi_sync_master_no_times                     #关闭半同步复制的次数
Rpl_semi_sync_master_no_tx                        #表示没有成功接收slave提交的次数
Rpl_semi_sync_master_status               #表示当前是异步模式还是半同步模式,on为半同步
Rpl_semi_sync_master_timefunc_failures            #调用时间函数失败的次数
Rpl_semi_sync_master_tx_avg_wait_time             #事物的平均传输时间
Rpl_semi_sync_master_tx_wait_time                 #事物的总共传输时间
Rpl_semi_sync_master_tx_waits                     #事物等待次数
Rpl_semi_sync_master_wait_pos_backtraverse        #可以理解为"后来的先到了,而先来的还没有到的次数"
Rpl_semi_sync_master_wait_sessions    #当前有多少个session因为slave的回复而造成等待
Rpl_semi_sync_master_yes_tx           #成功接受到slave事物回复的次数

三、半同步复制转为异步复制的情况

当半同步复制发生超时(由rpl_semi_sync_master_timeout参数控制,默认为10000ms,即10s),会暂时关闭半同步复制,转而使用异步复制,也就是会自动降为异步工作。

当 master dump 线程发送完一个事务的所有事件之后,如果在 rpl_semi_sync_master_timeout 内,收到了从库的响应, 则主从又重新恢复为半同步复制。

四、使用半同步复制注意点

1.在一主多从的架构中,如果要开启半同步复制,并不要求所有的从都是半同步复制。

2.MySQL 5.7极大的提升了半同步复制的性能。

5.6 版本的半同步复制,dump thread 承担了两份不同且又十分频繁的任务:传送binlog 给 slave ,还需要等待 slave 反馈信息,而且这两个任务是串行的,dump thread 必须等待 slave 返回之后才会传送下一个 events 事务。dump thread 已然成为整个半同步提高性能的瓶颈。在高并发业务场景下,这样的机制会影响数据库整体的系统吞吐量(TPS)。

5.7 版本的半同步复制中,独立出一个 ack collector thread ,专门用于接收 slave 的反馈信息。这样 master 上有两个线程独立工作,可以同时发送 binlog 到 slave ,和接收 slave 的反馈。

Mysql主从复制的三种同步方式和半同步复制配置相关推荐

  1. mysql主从复制、基于GTID的主从、半同步

    使用的mysql版本5.7.17 一.主从复制 原理: 主从复制一共有三个进程,从库生成两个线程,一个I/O线程,一个SQL线程: i/o线程去请求主库的binlog,并将得到的binlog日志写到r ...

  2. mysql几种安装方法_mysql的三种安装方式(详细)

    安装MySQL的方式常见的有三种: rpm包形式 通用二进制形式 源码编译 1,rpm包形式 (1) 操作系统发行商提供的 (2) MySQL官方提供的(版本更新,修复了更多常见BUG)www.mys ...

  3. mysql主从 复制新库_关于MySQL主从复制的几种复制方式总结

    异步复制 MySQL的复制默认是异步的,主从复制至少需要两个MYSQL服务,这些MySQL服务可以分布在不同的服务器上,也可以在同一台服务器上. MySQL主从异步复制是最常见的复制场景.数据的完整性 ...

  4. php连接mysql_PHP连接MySQL数据库的三种方式

    本篇文章给大家介绍一下PHP连接MySQL数据库的三种方式(mysql.mysqli.pdo),结合实例形式分析了PHP基于mysql.mysqli.pdo三种方式连接MySQL数据库的相关操作技巧与 ...

  5. ubuntu安装mysql没反应_Ubuntu安装mysql三种安装方式

    三种安装方式: 1. 从网上安装 sudo apt-get install mysql-server.装完已经自动配置好环境变量,可以直接使用mysql的命令. 注:建议将/etc/apt/sourc ...

  6. php连接虚拟机中mysql数据库吗,PHP连接MySQL数据库的三种方式

    本篇文章给大家介绍一下PHP连接MysqL数据库的三种方式(MysqL.MysqLi.pdo),结合实例形式分析了PHP基于MysqL.MysqLi.pdo三种方式连接MysqL数据库的相关操作技巧与 ...

  7. php 复制mysql数据库_PHP连接MySQL数据库的三种方式

    本篇文章给大家介绍一下PHP连接MySQL数据库的三种方式(mysql.mysqli.pdo),结合实例形式分析了PHP基于mysql.mysqli.pdo三种方式连接MySQL数据库的相关操作技巧与 ...

  8. .net mysql和php mysql数据库连接_浅谈PHP连接MySQL数据库的三种方式

    本篇文章给大家介绍一下PHP连接MySQL数据库的三种方式(mysql.mysqli.pdo),结合实例形式分析了PHP基于mysql.mysqli.pdo三种方式连接MySQL数据库的相关操作技巧与 ...

  9. python操作数据库的几种方法_python对mysql数据库操作的三种不同方式

    原标题:python对mysql数据库操作的三种不同方式 |转载自:博客园 |原文链接:http://www.cnblogs.com/mryrs/p/6951008.html 先要说一下,在这个暑期如 ...

最新文章

  1. CompletableFuture 实现异步计算
  2. CentOS 安装及使用 terraform 最新教程
  3. 微软程序员利用测试账户套现千万美元,或面临 20 年监禁
  4. C语言循环不执行语句,求大神来看一下 为什么for循环中scanf语句不执行?
  5. ajax长轮询 java web_网页实时聊天之js和jQuery实现ajax长轮询
  6. Bootstrap按钮的外观
  7. Java虚拟机(二)—主流Java虚拟机分类及发展历程
  8. SharePoint2010添加webpart找不到内容编辑器
  9. onenetsim定位功能吗_餐饮空间的设计原则和特点,你了解吗?
  10. 基于Matlab----RSSI指纹定位技术性能仿真
  11. 【正点原子FPGA连载】第三十二章 MDIO接口读写测试实验-摘自【正点原子】领航者ZYNQ之FPGA开发指南_V2.0
  12. ASIO Link Pro 声卡跳线(搭配福克斯特solo声卡)
  13. 第五章 国内著名网络数据库系统
  14. NFS问题:server not responing 和 RPC call returner error 128
  15. filter java exclude_Filter中排除对指定URL的过滤
  16. 拒绝服务攻击过程详解
  17. Angular 脚手架
  18. MySQL 字符集utf8、utf8mb3、utf8mb4
  19. 数据安全-数据交换安全
  20. 2023年入门网络安全(黑客)收藏这个就够了

热门文章

  1. MySQL数据库——备份与恢复
  2. 牛客练习赛52.Galahad(树状数组维护区间不相同数的和)
  3. 刘强东:大学打过好几份工 最赚钱的是编程
  4. 会声会影编辑html,会声会影视频声音编辑
  5. 马尔科夫链Markov以及空间Markov Matlab代码
  6. MongoDB 可视化工具 RoboMongo---Win7 64 安装
  7. 使用IKAnalyzer进行中文分词
  8. nodejs安装weinre 及移动端调试网页
  9. VVC帧间预测(十)帧间帧内联合预测CIIP
  10. 一份游戏策划书的范例[转载]