`
y806839048
  • 浏览: 1107142 次
  • 性别: Icon_minigender_1
  • 来自: 上海
文章分类
社区版块
存档分类
最新评论

mysql主从复制搭建同步中几种log和pos详解--延时显现

阅读更多

主从复制是一个老话题了,这里不就不说主从复制的细节了,重点讲下关于show slave status\G 中几种日志和位置的区别;

Seconds_Behind_Master: 1890---设置延迟的时间

Exec_Master_Log_Pos: 89696777

 Read_Master_Log_Pos: 93164610

从这个时机的库位置信息,读的位置,大于执行的位置,说明从库读到了日志,但是还没执行到读的位置---延迟

 

首先截个图方便讲解:

 

 

图中那么多参数,更重要的是单是*log,*pos就好几个,怎么区分呢,各自又代表什么意义呢?

我们先来讲下主从复制的原理:

一、主从原理

Replication 线程

   Mysql的 Replication 是一个异步的复制过程,从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysql instance(我们称之 Slave)。在Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在 Slave 端,另外一个线程(IO线程)在 Master 端。

要实现 MySQL Replication ,首先必须打开 Master 端的

Binary Log(mysql-bin.xxxxxx)功能,否则无法实现。因为整个复制过程实际上就是Slave从Master端获取该日志然后再在自己身上完全 顺序的执行日志中所记录的各种操作。打开 MySQL 的 Binary Log 可以通过在启动 MySQL Server 的过程中使用 “—log-bin” 参数选项,或者在 my.cnf 配置文件中的 mysqld 参数组([mysqld]标识后的参数部分)增加 “log-bin” 参数项。

复制的基本过程如下 :

1. Slave 上面的IO线程连接上 Master,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;

2. Master 接收到来自 Slave 的 IO 线程的请求后,通过负责复制的 IO 线程根据请求信息读取指定日志指定位置之后的日志信息,返回给 Slave 端的 IO 线程。返回信息中除了日志所包含的信息之外,还包括本次返回的信息在 Master 端的 Binary Log 文件的名称以及在 Binary Log 中的位置;

3. Slave 的 IO 线程接收到信息后,将接收到的日志内容依次写入到 Slave 端的Relay Log文件(mysql-relay-bin.xxxxxx)的最末端,并将读取到的Master端的bin-log的文件名和位置记录到master- info文件中,以便在下一次读取的时候能够清楚的高速Master“我需要从某个bin-log的哪个位置开始往后的日志内容,请发给我”

4. Slave 的 SQL 线程检测到 Relay Log 中新增加了内容后,会马上解析该 Log 文件中的内容成为在 Master 端真实执行时候的那些可执行的 Query 语句,并在自身执行这些 Query。这样,实际上就是在 Master 端和 Slave 端执行了同样的 Query,所以两端的数据是完全一样的。

简单来讲就是从库先通过io线程读取主库的二进制文件(Master_Log_File)和位置(Read_Master_Log_Pos)然后缓存到本地(从库服务器)的中继文件(Relay_Log_File)中并记录已经读取到的位置(Relay_Log_Pos),再通过从库的sql线程去读取中继文件(Relay_Log_File),这个sql线程执行会记录已经执行到了哪个文件(Relay_Master_Log_File)和哪个位置(Exec_Master_Log_Pos)。

图解为:

 

那上图中大家肯定会奇怪复制过程很简单,似乎也没有用到三种日志文件啊,只看到了2个;

 

既然在slave的状态中显示了三种日志文件以及其位置,那么我们先来看看他们的定义,稍后再做解释;

二、日志解释

l Master_Log_File,Read_Master_Log_Pos 记录了IO thread读到的当前master binlog文 件和位置, 对应master的binlog文件和位置。

l Relay_Log_File,Relay_Log_Pos记录了SQL thread执行到relay log的那个文件和位置,对应的是slave上的relay log文件和位置。

l Relay_Master_Log_File,Exec_Master_Log_Pos记录的是SQL thread执行到master binlog的文件和位置,对应的master上binlog的文件和位置。

 

看了定义就能更好的理解上面主从复制的过程了。

三、日志详解

1.我们看下普通的binlog文件,通过mysqlbinlog解析出来的文本文件:

 

我们这里主要是row方式的binlog。

可以看到,binlog的event语句开始位置就是二进制binlog文件的字节偏移位置。而且根据上一个event的end_log_pos可以找到下一个event开始的位置,如上图所示 。

2.我们再看看relay_log,同样可以用mysqlbinlog工具来解析(不是同一台机器):

 

Relay_log和binlog记录方式基本相同,最大的不同就是end_log_pos记录的是master的binlog文件中event的位置,而不是relay log自己event的位置。如图所示,上一个event的end_log_pos和下一个relay log event开始的位置不一样。 

为什么需要这样设置?原因很简单,就是为了方便找到master binlog的位置,在slave上,记录relay log 下一个event的开始偏移意义不大,但是如果记录了master binlog的偏移量,我们就可以在SQL thread中明确我们执行到master的某个binlog的哪个位置了。那么是哪个binlog列。我们找到relay_log的最前面 .

 

· IO thread 把所有从master读到的binlog记录到本地的binlog中,所以relay log的最后一个event的end log_pos就是Read_Master_Log_Pos

· SQL thread按照transaction来执行,所以Exec_Master_Log_Pos对应relay log中最后一个事务event的end_log_pos,这个位置对应的是master的binlog的位置。

· Relay_Log_Pos 记录的是SQL thread执行的event在relay log中结束位置,这个才是relay log的偏移量。

 

那么,从别的服务器取的从库信息来看,我们重新搭建新的从库只需要的是其中的Relay_Master_Log_File & Exec_Master_Log_Pos

 

 

分享到:
评论

相关推荐

    MySQL主从复制搭建从入门到掌握

    ### MySQL主从复制搭建知识点详解 #### 一、MySQL主从复制概述 MySQL主从复制是一种数据同步机制,它能够将一个MySQL服务器(主服务器)的数据自动同步到一个或多个MySQL服务器(从服务器)。这种机制不仅可以提高...

    mysql 主从复制环境搭建

    my.ini,找到[mysqld]添加如下配置:server-id = 1 binlog-do-db=test #要同步的数据库binlog-ignore-db=mysql #不同步的数据库,如果指定了 binlog-do-db 这里应该可以不用指定的log-bin=mysql-bin #要生成的二进制...

    MySQL主从复制搭建 需要用到的脚本

    MySQL主从复制是一种常见的数据库高可用性和数据冗余策略,它允许数据在多个服务器之间同步,确保即使在主服务器故障时,从服务器也能接管服务,从而实现无中断的服务连续性。这里提到的“MySQL主从复制搭建 需要...

    mysql主从复制搭建文档

    ### MySQL主从复制搭建知识点详解 #### 一、MySQL主从复制概述 MySQL主从复制是一种数据同步机制,它能够实现在多个服务器间的数据一致性。通过这种机制,可以从主服务器(Master)自动地将所有数据库操作(包括DDL...

    如何实现MySQL的主从复制和半同步复制

    MySQL的主从复制和半同步复制是数据库集群中常见的高可用性和数据冗余策略,能够保证数据的一致性并提供故障恢复能力。本文将详细解释这两种复制方式的原理、配置步骤以及优缺点。 **一、MySQL主从复制** MySQL...

    mysql主从复制搭建.docx

    #### 二、主从复制过程详解 1. **主库操作记录**:每当主库执行完一条更改数据的SQL语句后,对应的更改会被记录在二进制日志(binary log)中。这些记录称为“二进制日志事件”(binary log events)。 2. **中继日志...

    Docker搭建MySQL主从复制(docker-compose)

    docker_compose搭建mysql主从复制

    docker-compose关于mysql主从复制一键搭建脚本

    关于博客: https://blog.csdn.net/qq_42413011/article/details/126914080 的搭建脚本

    MySQL主从复制.docx

    ### MySQL 主从复制详解 #### 一、引言 MySQL 的主从复制是一种常见的数据库架构模式,它能够帮助实现数据的自动备份与读写分离,从而增强数据安全性并提高数据库性能。本文将详细介绍 MySQL 主从复制的基本概念、...

    MySQL 主从复制模式全面实践

    MySQL主从复制模式是数据库领域内一种重要的数据同步机制,它能够让一台主数据库服务器(master)的数据实时复制到一个或多个从数据库服务器(slave)上。这种机制在数据库的高可用性、数据备份、读写分离以及负载...

    MySQL主从复制与读写分离.docx

    MySQL 主从复制是指将一个 MySQL 服务器的数据实时同步到另一个 MySQL 服务器中,以实现数据的高可用性和读写分离。下面是 MySQL 主从复制与读写分离的详细知识点: MySQL 主从复制 MySQL 主从复制是指将一个 ...

    mysql主从复制搭建(避免采坑)

    mysql主从复制 踩完坑给大家 3分 完整,让大家少踩坑.

    mysql主从同步搭建修改优化版.pdf

    MySQL主从同步是一种常见的数据库高可用性和数据冗余策略,它允许数据在多个服务器之间实时复制,确保即使在一台服务器故障时,数据仍然可以被访问。以下是对搭建、修改和优化MySQL主从同步过程的详细解释: 1. **...

    MySQL主从同步配置过程.docx

    change master to master_host='192.168.147.133', master_port=3306, master_user='root', master_password='root', master_log_file='mysql-bin.000003', master_log_pos=0; ``` ### 4. 启动同步进程 启动从...

Global site tag (gtag.js) - Google Analytics