mysql 异步复制VS半同步复制

2023-05-16

MySQL数据复制原理

在这里插入图片描述

异步复制:

默认情况下,MySQL的复制是异步复制,主服务器及其从服务器是独立的。异步复制可以提供最佳的性能,主服务器将更新的数据写入二进制日志(Binlog)文件后,无需等待验证更新数据是否已经复制到从服务器中,就可以自由处理其它进入的事务处理请求。但如果在主服务器或从服务器端发生故障,会造成主从数据的不一致,甚至在恢复时造成数据丢失。

半同步复制:

半同步复制是从MySQL5.5开始引入的功能,可以确保主服务器和访问链中至少一台从服务器之间的数据一致性和冗余。一台主服务器和其许多从服务器都进行了配置,这样,至少有一台从服务器在父主服务器进行事务处理前,必须确认更新已经收到并写入了其中继日志(Relay Log)。当出现超时,主服务器必须暂时切换到异步复制模式重新复制,直到至少有一台设置为半同步复制模式的从服务器及时收到信息。

在这里插入图片描述
在这里插入图片描述

异步复制实验

普通复制转化为半同步复制:假设已经搭建完成一主一从的GTID复制环境:
master:192.168.2.77
slave:192.168.2.74

1、在主从上分别安装插件

master上
root@(none) 10:12  mysql>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';

slave上
root@(none) 10:17  mysql>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';

2、查看

root@(none) 10:18  mysql>show plugins;

3、启用插件

master上
root@(none) 10:24  mysql>set global rpl_semi_sync_master_enabled=1;
Query OK, 0 rows affected (0.01 sec)

slave上
root@(none) 10:23  mysql>set global rpl_semi_sync_slave_enabled=1;
Query OK, 0 rows affected (0.04 sec)

4、重启

root@(none) 10:27  mysql>stop slave;
Query OK, 0 rows affected (0.19 sec)

root@(none) 10:28  mysql>start slave;
Query OK, 0 rows affected (0.05 sec)

root@(none) 10:29  mysql>show global variables like '%rpl_semi%';
+---------------------------------+-------+
| Variable_name                   | Value |
+---------------------------------+-------+
| rpl_semi_sync_slave_enabled     | ON    |
| rpl_semi_sync_slave_trace_level | 32    |
+---------------------------------+-------+
2 rows in set (0.25 sec)


root@(none) 10:25  mysql>show global variables like '%rpl_semi%';
+-------------------------------------------+------------+
| Variable_name                             | Value      |
+-------------------------------------------+------------+
| rpl_semi_sync_master_enabled              | ON         |#主库是否打开半同步复制
| rpl_semi_sync_master_timeout              | 10000      |#毫秒为单位,当主库等待从库ACK的实践超过这个值,就会自动转化为异步复制
| rpl_semi_sync_master_trace_level          | 32         |#master的trace 级别,分为四个(1,16,32,64),分别记录不同的信息,32能够输出更详细的网络延迟等信息,也是默认值
| rpl_semi_sync_master_wait_for_slave_count | 1          |#至少有N个slave接收到日志,一主多从的情况下只要有一个slave的ACK返回给了主库,就会进行commit
| rpl_semi_sync_master_wait_no_slave        | ON         |#默认为ON,当半同步复制转换为异步复制后,如果从库的日志追赶上了主库,会自动转换为半同步复制,设置为OFF的话就不会再进行转换。
| rpl_semi_sync_master_wait_point           | AFTER_SYNC |#这是MySQL5.7新增的功能,可以设置两个值AFTER_SYNC 和AFTER_COMMIT,AFTER_COMMIT的模式下master将每个事务写入binlog ,传递到slave 刷新到磁盘(relay log),同时主库提交事务。master等待slave 反馈收到relay log,只有收到ACK后master才将commit OK结果反馈给客户端。AFTER_SYNC 情况下master 将每个事务写入binlog , 传递到slave 刷新到磁盘(relay log)。master等待slave 反馈接收到relay log的ack之后,再提交事务并且返回commit OK结果给客户端。 即使主库crash,所有在主库上已经提交的事务都能保证已经同步到slave的relay log中。我们推荐使用默认AFTER_SYNC 的情况,这样可以提高性能,减少等待时间。
| rpl_semi_sync_slave_enabled               | OFF        |#从库是否打开半同步复制功能
| rpl_semi_sync_slave_trace_level           | 32         |#trace 级别
+-------------------------------------------+------------+
8 rows in set (0.31 sec)

5、验证

在master上建新库
root@(none) 10:32  mysql>create database xgy;
Query OK, 1 row affected (0.07 sec)
在slave上查看
root@(none) 10:32  mysql>show databases;
+--------------------+
| Database           |
+--------------------+
| xgy                |
+--------------------+
=====》成功
关闭slave验证
#slave上
root@(none) 10:32  mysql>stop slave;
Query OK, 0 rows affected (0.00 sec)

#master上
root@(none) 10:32  mysql>create database xgy2;
Query OK, 1 row affected (10.04 sec)  #卡住,耗时10.04sec

#这里10S太长了,可以在master上修改配置文件,在/etc/my.cnf添加者两行配置
#[mysqld]
#rpl_semi_sync_master_enabled=1
#rpl_semi_sync_master_timeout=1000       # 1 second

#在slave上添加
#[mysqld]
#rpl_semi_sync_slave_enabled=1

#在slave上查看
root@(none) 10:32  mysql>show databases;
+--------------------+
| Database           |
+--------------------+
| xgy                |
+--------------------+
#没有xgy2,原因:stop slave,即关闭了slave上的IO线程。没办法去master上去拉取。

#重新开启slave,查看
root@(none) 10:33  mysql>start slave ;
Query OK, 0 rows affected (0.04 sec)

root@(none) 10:34  mysql>show databases;
+--------------------+
| Database           |
+--------------------+
| xgy                |
| xgy2               |
+--------------------+


#在master上如何查看有哪些从
root@(none) 10:32  mysql>show processlist;
+----+----------+--------------------+------+-------------+------+---------------------------------------------------------------+------------------+
| Id | User     | Host               | db   | Command     | Time | State                                                         | Info             |
+----+----------+--------------------+------+-------------+------+---------------------------------------------------------------+------------------+
|  6 | root     | localhost          | NULL | Query       |    0 | starting                                                      | show processlist |
|  8 | cr-slave | 192.168.2.74:59272 | NULL | Binlog Dump |   58 | Master has sent all binlog to slave; waiting for more updates | NULL             |
+----+----------+--------------------+------+-------------+------+---------------------------------------------------------------+------------------+
2 rows in set (0.00 sec)

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

mysql 异步复制VS半同步复制 的相关文章

随机推荐

  • 关于单链表的理解

    链表是一种物理 存储单元上非连续 非顺序的 存储结构 xff0c 数据元素的逻辑顺序是通过链表中的 指针链接次序实现的 链表由一系列结点 xff08 链表中每一个元素称为结点 xff09 组成 xff0c 结点可以在运行时动态生成 每个结点
  • selinux is active unexpected inconsistency RUN fsck MANUALLY

    启动centos6 5时报错 xff0c 错误主要是 xff1a selinux is active unexpected inconsistency RUN fsck MANUALLY 原因是因为意外关机如断电 xff0c 或者虚拟机中强
  • Linux永久修改主机名

    hostnamectl set hostname xxx
  • 去除重复字母(Java实现)

    题目 去除重复字母 给你一个字符串 s xff0c 请你去除字符串中重复的字母 xff0c 使得每个字母只出现一次 需保证 返回结果的字典序最小 xff08 要求不能打乱其他字符的相对位置 xff09 示例1 输入 xff1a s 61 b
  • JDK介绍(笔记学习)

    JDK介绍 1 JRE和JDK xff08 记忆 xff09 JDK 称为Java开发工具 xff0c 包含了JRE和开发工具 JRE Java运行环境 xff0c 包含了JVM和Java的核心类库 xff08 Java API xff09
  • Collections类(笔记)

    1 Collections的常用功能 重点 import java util Collections java util Collections是集合工具类 xff0c 用来对集合进行操作 常用方法如下 xff1a public stati
  • 计算机网络原理学习笔记第一篇

    计算机网络的出现 世界上第一台电子计算机问世于1946年 xff0c 由于当时造价昂贵 体积极大等原因 xff0c 因此计算机的数量极少 计算机系统是高度集中的 xff0c 它的所有设备都安装在单独的机房中 xff0c 为了提高计算机的利用
  • mac下Tomcat启动成功后浏览器输入localhost:8080拒绝连接的解决办法

    今天根据大佬们的安装教程将Tomcat安装并成功启动 xff0c 而在浏览器中输入localhost xff1a 8080后却出现了 localhost拒绝了我们的连接请求 的字样 xff0c 网上的解决方案五花八门 xff0c 水平也是参
  • Linux中的软件管理

    Linux中的软件管理 yum源头 定义 xff1a yum源是一个软件集合地 xff0c 只需要搜索并安装你想要的软件 yum的全称是Yellowdog Updater Modified xff0c 是一个shell前端软件包管理器 xf
  • Spring拦截器HandlerInterceptor和HandlerInterceptorAdapter

    参考 https blog csdn net zhibo lv article details 81699360 https www cnblogs com jing99 p 11147152 html HandlerInterceptor
  • Java多线程超详解

    引言 随着计算机的配置越来越高 xff0c 我们需要将进程进一步优化 xff0c 细分为线程 xff0c 充分提高图形化界面的多线程的开发 这就要求对线程的掌握很彻底 那么话不多说 xff0c 今天本帅将记录自己线程的学习 程序 xff0c
  • 如何在Ubuntu 20.04上使用UFW设置防火墙

    介绍 Introduction UFW or Uncomplicated Firewall is a simplified firewall management interface that hides the complexity of
  • 人工智能主要分支

    人工智能主要分支 1 主要分支介绍 通讯 感知与行动是现代人工智能的三个关键能力 xff0c 在这里我们将根据这些能力 应用对这三个技术领域进行介绍 xff1a 计算机视觉 CV 人脸识别 自然语言处理 NLP 语音识别 语义识别 在 NL
  • 解决文件上传过大报错The field file exceeds its maximum permitted size of 1048576 bytes.问题

    报错内容如下 只需要在相应的yml配置文件spring下增加相关配置即可
  • 我有一个IT梦

    介绍 作为一名大二的学生 xff0c 接触计算机基础技术近乎俩年 xff0c 俩年来我愈加发觉计算机是一门发展力很强的学科 它多式多样 xff0c 更像是一种挑战 xff0c 对于好强的我来说 xff0c 越来越着迷计算机的世界 纵然未知的
  • Nginx安装教程

    前言 xff1a 同步文章图片有问题想看带有图片版的请移步 xff1a https www yuque com docs share 3fbd7d5a 639c 4ca8 8500 00071b7cb23d BvpWF 本篇文章涉及ngin
  • Kali-Linux-2020.1 设置中文,汉化。

    Kali Linux 2020 1 设置中文 xff0c 汉化 Kali Linux团队在Twitter上宣布 xff1a 新的一年是进行重大改变的好时机 xff0c 因此 xff0c 我们宣布在 即将发布的2020 1版本中 xff0c
  • PowerShell压缩和解压ZIP文件

    压缩 Compress Archive Path D File DestinationPath E File zip 解压 Expand Archive Path E File zip DestinationPath D File
  • python实现基本算法之归并排序(Merge sort)

    基本算法之归并排序 Merge sort 基本算法 04 归并排序 Merge sort 算法 往期请看选择排序 xff0c 插入排序 xff0c 归并排序 xff0c 快速排序等等都发布的 xff01 欢迎大家批评指正 xff01 文章目
  • mysql 异步复制VS半同步复制

    MySQL数据复制原理 异步复制 xff1a 默认情况下 xff0c MySQL的复制是异步复制 xff0c 主服务器及其从服务器是独立的 异步复制可以提供最佳的性能 xff0c 主服务器将更新的数据写入二进制日志 xff08 Binlog