IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> MySQL(八)—制作一个动画看MySQL主从复制原理 -> 正文阅读

[大数据]MySQL(八)—制作一个动画看MySQL主从复制原理


0、接上篇
?
上篇我们搭建好了MySQL主从复制,我觉得通过实践后的结果来倒推原理是最好的方式之一。下面通过分析MySQL主从服务器的状态,来学习下主从复制的原理。

先制作一个动画看主从复制的过程

请添加图片描述
从上篇的实践出发看整体的过程

一、MySQL主从服务器状态

1.主服务器状态

mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000009 |      753 |              |                  |                   |
+------------------+----------+--------------+------------------+-------------------+

说明主服务器当前写的日志文件为mysql-bin.000009(File字段),当前位置为753(Position字段)
?

2.从服务器状态

mysql> show slave status\G
*************************** 1. row ***************************
               //从服务器IO线程状态:等待主服务器发送二进制日志事件
               Slave_IO_State: Waiting for master to send event
                //失败重连时间
                Connect_Retry: 60
              //I/O线程当前正在读取的主服务器二进制日志文件的名称
              Master_Log_File: mysql-bin.000009
          //在当前的主服务器二进制日志中,I/O线程已经读取的位置。   
          Read_Master_Log_Pos: 591
               //SQL线程当前正在读取和执行的中继日志文件的名称
               Relay_Log_File: 9696cc5c2787-relay-bin.000002
               //在当前的中继日志中,SQL线程已读取和执行的位置。
                Relay_Log_Pos: 320
        //当前中继日志同步的二进制日志文件
        Relay_Master_Log_File: mysql-bin.000009
             //IO线程是否运行
             Slave_IO_Running: Yes
             //SQL线程是否运行
            Slave_SQL_Running: Yes
          //表示同步到主服务器的二进制日志偏移量的位置
          Exec_Master_Log_Pos: 591
              Relay_Log_Space: 534
      //主服务器SQL线程运行状态:主服务器已经读取了所有中继日志,正在等待新的数据
      Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates

SQL线程延时时间:(Read_Master_Log_Pos-Exec_Master_Log_Pos),单位为字节。上面的结果为0,表示当前主从服务器是完全同步的。
?

3.取出主从服务器状态名词

将主从服务器的状态名词提取出来,然后通过文字或者图片将其串联起来。涉及的到名词如下
主服务器(master)、binlog、从服务器(slave)、IO线程、SQL线程、relay log。下面通过讲原理将其串联起来。

二、主从复制原理

1.主从复制需要几个线程完成?

MySQL同步复制功能由3个线程(master上1个,slave上2个)来实现。从服务器上是通过IO线程和SQL线程,主服务器的线程可以通过show processlist命令查看,该线程执行的命令是Binlog Dump,该线程当前状态是已经向从服务器发送全部的binlog(二进制日志),正在等待新数据。
在这里插入图片描述

2.这几个线程如何配合完成工作?

?
首先要明确的是slave请求master发送指定位置后的日志内容,这个指定位置需要slave上一次请求时,由master告诉slave。具体的步骤如下
?

1.从服务器I/O线程发送请求:从服务器执行start slave命令后,slave就会创建一个I/O线程。I/O线程连接到master上,并请求master,要读取指定日志文件位置之后的日志内容。
?
2.主服务器接收请求:主服务器接收到请求后创建一个线程,该线程把内容返回给slave的I/O线程。这个内容有日志所包含的信息,还有master的binlog文件名称及这次读取binlog日志的位置

3.从服务器I/O线程写入relay log文件:slave的I/O线程接收到信息后,将接收到的日志内容依次写入到slave的relay log文件的结尾处,并将从master读取到的binlog的文件名和位置记录到master-info文件中,以便下次再读取
?
4.从服务器SQL线程解析relaylog文件:salve的SQL线程检测到relaylog中新增加了内容后,会马上解析该log文件中的内容成为在master真实执行那些可执行的SQL语句,并执行这些SQL语句。通过执行相同的SQL语句就保证了 master和slave的数据一致。

三、总结

最后我们简单总结下MySQL的主从复制。MySQL主从复制是读写分离、MySQL高可用集群的基础,随着软件的并发量越来越大,使用读写分离、MySQL集群的场景越来越多,可见MySQL主从复制的重要性。
然而,由于主从复制实现的方式是异步的,这就可能导致在复制数据时导致数据丢失的问题。下篇将分享MySQL的高可用架构,在不同场景使用不同的架构去规避主从复制数据丢失的问题。
?

?

?

?

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-09-18 10:14:40  更:2021-09-18 10:15:07 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/23 19:52:26-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码