文档章节

【复制系列】基于binlog文件和位置的 传统复制

star_glm
 star_glm
发布于 2017/07/13 17:27
字数 1101
阅读 220
收藏 16

 

前言

基于日志文件和位置的 传统复制,是根据binlog文件和master_log_position确定复制的。

 

传统复制的原理

在master上,线程:dump_thread ;日志:binlog

在slave上,线程:IO_thread SQL_thread;日志:relay log

1、在主库master中,记录二进制日志

在事务准备提交前,主库将更新的事件记录到binlog中,然后事务提交。注意,在binlog文件记录的事务均是按照事务提交顺序来记录的。

2、从库将主库的binlog复制到自己的relay log中

从库中的IO_thread 与主库建立一个连接,在主库,每当有新事件时,dump_thread会读取该事件,并发送给IO_thread,IO_thread 将接收到的事件记录在从库的relay log中。

3、SQL_thread 执行复制过来的事件

从库中的SQL_thread会执行relay log中记录的事件,以此更新从库的数据。但是,SQL_thread是否会将执行的事件记录到本地的binlog中,由参数log_slave_updates控制。

 

传统复制的搭建

机器环境:

  • 以 一主一从为例。
  • Master IP: 172.16.100.100
  • Slave IP: 172.16.100.101 
  • 两机器均已安装MySQL。

配置步骤:

# 主库(master)

  • 在 my.cnf 中添加 or 修改:
    • server-id=1003306      #  IP最后一个字段+端口号
    • log-bin=/data/mysql/mysql3306/mysql-bin
    • binlog_format = row
  • 在mysql中创建复制使用的账户:
    • mysql> create user 'repl'@'172.16.100.101' identified by '123123';
    • mysql> grant replication slave on *.* to 'repl'@'172.16.100.101' ;  
    • mysql> show master status\G

# 从库(slave)

  • 在 my.cnf 中添加 or 修改:
    • server-id=1013306       #  IP最后一个字段+端口号
    • log-bin=/data/mysql/mysql3306/mysql-bin
    • binlog_format = row
    • log_slave_updates        # 使从库产生binlog,若不配置,即使开启log-bin参数,也不会产生binlog,若不需要binlog,则不用配置该参数
  • 使 从库 指向 从库(保证该操作之前复制线程已停止!)
    • mysql>change master to master_host='172.16.100.100',master_user='repl',master_password='123123',master_log_file='mysql-bin.000001',master_log_pos=330;

# 开启和关闭复制(在从库操作)

  • start slave;       # 开启复制
  • show slave status\G              # 查看复制情况

 

解读 show slave status 的主要字段

  • Master_Log_File:IO thread 当前在读的主库binlog文件
  • Read_Master_Log_Pos:IO thread 已读到的主库binlog的位置
  • Relay_Log_File:SQL thread 正在读取的relay log文件
  • Relay_Log_Pos:SQL thread 已读取的relay log中的位置
  • Relay_Master_Log_File:SQL thread最近执行的事件 所在主库的binlog文件
  • Slave_IO_Running:IO thread 是否在运行(必须为Yes,否则有问题)
  • Slave_SQL_RunningSQL thread 是否在运行(必须为Yes,否则有问题)
  • Replicate_Do(Ignore)_DB:在复制时,复制或忽略复制的库
  • Last_Errno/Last_Error:错误码/错误说明;通常主从报错时在这里显示错误的原因
  • Exec_Master_Log_Pos:705904595     # SQL thread已执行事件的主库binlog的位置,也标志 将要处理下一个事件或事务的开始;通常这个位置在主库对应binlog文件中是这样的:
……

#170713 15:52:16 server id 1003306  end_log_pos 705904595 CRC32 0xaee2b643    Xid = 5191672348
COMMIT/*!*/;
# at 705904595
#170713 16:02:10 server id 1003306  end_log_pos 705904674 CRC32 0x97e59f40    Query   thread_id=1442126       exec_time=0     error_code=0
SET TIMESTAMP=1499932930/*!*/;
BEGIN     
/*!*/;

……
  • Seconds_Behind_Master:从库正在处理事件时,此时从库的时间戳 与 正被处理的事件在主库上记录的时间戳的差值(单位为秒)。实际上,该值测量的是SQL 线程和IO线程之差,在主从的网络很好的情况下,从库的IO线程和主库很接近,SQL线程和IO线程之差 也就近似 SQL线程和主库之差(即是第一句的意思),因此,只有在网络很好的情况下,这个值才有参考性;而在网络不好的情况下,即使值为0,也不能说明没有延迟。
  • Last_IO_Error/Last_SQL_Error:IO thread出错的原因 / SQL thread出错的原因
  • SQL_Delay:从库必须滞后主库的秒数;因为有时会特意设置一个延迟的从库,用作误操作恢复
  • Retrieved_Gtid_Set:IO线程从主库所复制事务对应的GITD集合;但若没有开启GTID,则为空
  • Executed_Gtid_Set:在从库中已写入binlog的GTID集合,也是 在从库show master status的Executed_Gtid_Set值;但若没有开启GTID,则为空

© 著作权归作者所有

star_glm
粉丝 23
博文 16
码字总数 16450
作品 0
昌平
数据库管理员
私信 提问
与MySQL传统复制相比,GTID有哪些独特的复制姿势?

作者介绍 前言 GTID(Global Transaction ID)是MySQL5.6引入的功能,可以在集群全局范围标识事务,用于取代过去通过binlog文件偏移量定位复制位置的传统方式。借助GTID,在发生主备切换的情况...

陈华军
2016/12/13
0
0
mysql5.7基于GTID实现主从复制

mysql5.7基于GTID实现主从复制 一.GTID概述 1.1 GTID的概念 GTID,全局事务ID globaltransaction identifiers GTID是一个事务对应一个全局唯一ID,随事务记录到binlog中,用来标识事务。 GT...

yang_hwei
2017/01/10
0
0
MySQL传统主从复制(第一弹)

0、引言 MySQL主从复制的原理及搭建,故障分析 一、MySQL主从同步的架构及原理 原理: 1)Slave连接到master,主从数据一致,开启同步,开始同步数据 2) 用户在主上写入数据,日志储存到bin...

IT--小哥
2016/12/13
51
0
mysql之 MySQL 主从基于 GTID 复制原理概述

mysql之 MySQL 主从基于 GTID 复制原理概述 一、 什么是GTID ( Global transaction identifiers ): MySQL-5.6.2开始支持,MySQL-5.6.10后完善,GTID 分成两部分,一部分是服务的UUid,UUID...

xiaocao13140
2018/05/24
0
0
【20180402】MySQL关于replication filter和trigger的一些应用

需求描述 1.内网服务器有俩套主从复制环境,一套是基于传统复制的5.6.26版本,另外一套是基于GTID的5.7.19版本的复制。现在开发的需求是需要将基于传统复制的上面的俩个表同步到基于基于GTI...

liuhuang9496
2018/04/03
0
0

没有更多内容

加载失败,请刷新页面

加载更多

Spring Boot + Mybatis-Plus 集成与使用(二)

前言: 本章节介绍MyBatis-Puls的CRUD使用。在开始之前,先简单讲解下上章节关于Spring Boot是如何自动配置MyBatis-Plus。 一、自动配置 当Spring Boot应用从主方法main()启动后,首先加载S...

伴学编程
昨天
7
0
用最通俗的方法讲spring [一] ──── AOP

@[TOC](用最通俗的方法讲spring [一] ──── AOP) 写这个系列的目的(可以跳过不看) 自己写这个系列的目的,是因为自己是个比较笨的人,我曾一度怀疑自己的智商不适合干编程这个行业.因为在我...

小贼贼子
昨天
7
0
Flutter系列之在 macOS 上安装和配置 Flutter 开发环境

本文为Flutter开发环境在macOS下安装全过程: 一、系统配置要求 想要安装并运行 Flutter,你的开发环境需要最低满足以下要求: 操作系统:macOS(64位) 磁盘空间:700 MB(不包含 IDE 或其余...

過愙
昨天
6
0
OSChina 周六乱弹 —— 早上儿子问我他是怎么来的

Osc乱弹歌单(2019)请戳(这里) 【今日歌曲】 @凉小生 :#今日歌曲推荐# 少点戾气,愿你和这个世界温柔以待。中岛美嘉的单曲《僕が死のうと思ったのは (曾经我也想过一了百了)》 《僕が死の...

小小编辑
昨天
2.7K
16
Excption与Error包结构,OOM 你遇到过哪些情况,SOF 你遇到过哪些情况

Throwable 是 Java 中所有错误与异常的超类,Throwable 包含两个子类,Error 与 Exception 。用于指示发生了异常情况。 Java 抛出的 Throwable 可以分成三种类型。 被检查异常(checked Exc...

Garphy
昨天
42
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部