元月's blog 元月's blog
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多

元月

临渊羡鱼,不如退而结网
首页
  • 基础
  • 并发编程
  • JVM
  • Spring
  • Redis篇
  • Nginx篇
  • Kafka篇
  • Otter篇
  • Shardingsphere篇
  • 设计模式
  • MySQL
  • Oracle
  • 基础
  • 操作系统
  • 网络
  • 数据结构
  • 技术文档
  • Git常用命令
  • GitHub技巧
  • 博客搭建
  • 开发工具
更多
  • MySQL

    • MySQL的存储引擎和索引结构
    • 一条SQL的平凡之路--执行篇
    • 一条SQL的平凡之路--优化篇
    • MySQL的事务、锁和MVCC机制
    • MySQL的主从复制原理详解
      • 一、简介
      • 二、主从复制原理
      • 三、主从复制延迟如何处理?
        • 3.1、主从复制延迟排查方式
        • 3.2、可能造成延迟的原因
      • 四、其它
        • 4.1、什么是半同步复制?
        • 4.2、什么是GTID同步集群?
    • MySQL高可用架构
    • ShardingJDBC读写分离与分库分表实战
  • Oracle

  • 数据库
  • MySQL
元月
2022-11-26
目录

MySQL的主从复制原理详解

# 一、简介

MySQL主从复制是指将数据从一个MySQL主服务器(主节点)复制到一个或多个MySQL从服务器(从节点)

# 二、主从复制原理

MySQL服务的主从架构一般都是通过binlog日志文件来进行的。

1、主服务上打开binlog记录每一步的数据库操作

2、从服务上会有一个IO线程,负责跟主服务建立一个TCP连接,请求主服务将binlog传输过来

3、主库上会有一个IO dump线程,负责通过这个TCP连接把Binlog日志传输给从库的IO线程

4、从服务的IO线程会把读取到的binlog日志数据写入自己的relay日志文件中

5、从服务上另外一个SQL线程会读取relay日志里的内容,进行操作重演,达到还原数据的目的

主从同步事件binlog模式有3种形式:statement、row、mixed。

  1. statement: 会将对数据库操作的 sql 语句写入到 binlog 中。
  2. row: 会将每一条数据的变化写入到 binlog 中。
  3. mixed: statement 与 row 的混合。MySQL 决定什么时候写 statement 格式的,什么时候写 row 格式的 binlog

# 三、主从复制延迟如何处理?

# 3.1、主从复制延迟排查方式

使用命令SHOW SLAVE STATUS可以查看主从同步是否存在延迟:

*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 192.168.0.1
                  Master_User: repl_user
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: mysql-bin.000003
          Read_Master_Log_Pos: 12345678
               Relay_Log_File: relay-bin.000002
                Relay_Log_Pos: 12345678
        Relay_Master_Log_File: mysql-bin.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
            			.......
        Seconds_Behind_Master: 0
        					.......
1 row in set (0.00 sec)

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18

重点需要观察三个参数:

  • Slave_IO_Running:从服务器的I/O线程是否正在运行。
  • Slave_SQL_Running:从服务器的SQL线程是否正在运行。
  • Seconds_Behind_Master:从服务器与主服务器之间的复制延迟时间

# 3.2、可能造成延迟的原因

  1. 从库所在机器的性能要比主库性能差
  2. 从库的压力较大,即从库承受了大量的请求
  3. 从库的并行复制能力

可选的解决方案:

  1. 半同步复制
  2. 一主多从,分摊从库压力
  3. 强制走主库方案(强一致性)
  4. 并行复制 — 解决从库复制延迟的问题

MySQL 5.6 版本的并行复制策略

# 四、其它

# 4.1、什么是半同步复制?

MySQL主从集群默认采用的是一种异步复制的机制,有可能会丢数据,因此引入了半同步复制机制来保证数据安全

半同步复制机制是一种介于异步复制和全同步复制之前的机制。主库在执行完客 户端提交的事务后,并不是立即返回客户端响应,而是等待至少一个从库接收并写 到relay log中,才会返回给客户端。

MySQL在等待确认时,默认会等10秒,如果超 过10秒没有收到ack,就会降级成为异步复制

MySQL 5.5版本引入

# 4.2、什么是GTID同步集群?

GTID的本质也是基于Binlog来实现主从同步,只是他会基于一个全局的事务ID来标识同步进度。

  1. master更新数据时,会在事务前产生GTID,一同记录到binlog日志中
  2. slave端的i/o 线程将变更的binlog,写入到本地的relay log中
  3. sql线程从relay log中获取GTID,然后对比slave端的binlog是否有记录
  4. 如果有记录,说明该GTID的事务已经执行,slave会忽略
  5. 如果没有记录,slave就会从relay log中执行该GTID的事务,并记录到binlog

MySQL5.6版本引入

参考:一招教你解决mysql的主从复制延迟问题 (opens new window)

#MySQL#数据库
MySQL的事务、锁和MVCC机制
MySQL高可用架构

← MySQL的事务、锁和MVCC机制 MySQL高可用架构→

最近更新
01
otter二次开发-支持按目标端主键索引Load数据
08-03
02
mvnw简介
06-21
03
gor流量复制工具
06-03
更多文章>
Theme by Vdoing | Copyright © 2022-2024 元月 | 粤ICP备2022071877号-1
  • 跟随系统
  • 浅色模式
  • 深色模式
  • 阅读模式