MySQL主从同步原理及应用

目录
  • 1、主从同步原理
    • 主从同步架构图(异步同步)
    • 主从同步流程(异步同步)
    • 什么是binlog?
    • binlog的3种格式
    • binlog格式对比
    • 主从同步的2种方式
    • 主从同步流程(半同步)
    • 半同步适用场景
  • 2、主从同步应用场景

1、主从同步原理

主从同步架构图(异步同步)

这是最常见的主从同步架构

主从同步流程(异步同步)

  • 主库把数据变更写入binlog文件
  • 从库I/O线程发起dump请求
  • 主库I/O线程推送binlog至从库
  • 从库I/O线程写入本地的relay log文件(与binlog格式一样)
  • 从库SQL线程读取relay log并重新串行执行一遍,得到与主库相同的数据

什么是binlog?

主库每提交一次事务,都会把数据变更,记录到一个二进制文件中,这个二进制文件就叫binlog。需注意:只有写操作才会记录至binlog,只读操作是不会的(如selectshow语句)。

binlog的3种格式

statement格式:binlog记录的是实际执行的sql语句
row格式:binlog记录的是变化前后的数据(涉及所有列),形如update table_a set col1=value1, col2=value2 ... where col1=condition1 and col2=condition2 ...
mixed格式:默认选择statement格式,只在需要时改用row格式

binlog格式对比

  • statement级别:优点是binlog文件小,缺点是主库的慢sql也会在从库上再出现一次,一些依赖环境或上下文的函数可能会产生不一致的数据
  • row级别:缺点是文件大(一条语句如果涉及多行,会放大n倍),优点是无上述慢sql问题,不依赖环境或上下文
  • 为了获取前后变化数据,canal建议使用row级别

主从同步的2种方式

  • 异步同步:默认方式,可能会导致主从切换时数据丢失。因为主库是否commit与主从同步流程无关,也不感知。
  • 半同步:高可用方案,较新mysql版本支持,需要至少1个从库(默认1,具体数量可指定)对写入relay log进行ack,主库才会commit并把结果返回client

主从同步流程(半同步)

  • 从库在连接主库时,表明自己支持半同步复制
  • 主库也需支持半同步复制,主库commit事务前会阻塞等待至少一个从库写入relay logack,直至超时
  • 如果阻塞等待超时,则主库临时切换回异步同步模式,当至少一个从库的半同步追上进度时,主库再切换至半同步模式

半同步适用场景

高可用备份:半同步复制,可确保从库与主库的一致性,当主库发生故障时,切换到从库不会丢失数据。为了保证稳定性(不因半同步慢而拖累主库),一般不承担业务流量、尽可能快地ack,只用于同步备份。

2、主从同步应用场景

普通场景:线上从库异步同步,高可用备份半同步

对一致性要求较高的大数据取数需求

大数据取数可能导致从库cpu使用率飙升、ack变慢,可设置半同步所需ack数量为1,正常情况下高可用备份能很快ack,于是主库会commit并返回,而大数据取数复制慢一些也无所谓。这样就不会因为大数据取数ack慢而影响主库和业务了。

到此这篇关于MySQL主从同步原理及应用的文章就介绍到这了,更多相关MySQL主从同步原理及应用内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • Docker 环境运行 Mysql 和开启 Binlog 配置主从同步的设置方法

    同一服务器模拟利用 Docker 模拟 Mysql 设置的主从同步设置. 1.运行起来两个 Mysql :masterMysql(主库).slaveMysql(从库),数据库版本 5.7. #拉取镜像 docker pull mysql:5.7 #y运行主.从容器 docker run -p 13306:3306 --name slavemysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 docker run -p 13307:3306 --name

  • 一文带你了解Mysql主从同步原理

    目录 Mysql 主从同步原理简析 1.什么是主从 2.为什么要搞主从呢? 3.如何实现主从同步呢? 4.mysql 主从同步的原理 Mysql 主从同步原理简析 在开始讲述原理的情况下,我们先来做个知识汇总, 究竟什么是主从,为什么要搞主从,可以怎么实现主从,mysql主从同步的原理 1.什么是主从 其实主从这个概念非常简单 主机就是我们平常主要用来读写的服务,我们称之为master(主人.主宰) 从机就是主机进行的一个扩展,他一般不会主动用来读写,我们称之为slave( [sleɪv] 奴隶

  • 解决MySQL主从数据库没有同步的两种方法

    目录 解决MySQL主从数据库没有同步的两种方法 一.不同步情况 二.解决方案 1.先进入主库,进行锁表,防止数据写入 2.进行数据备份 3.查看master 状态 4.把mysql备份文件传到从库机器,进行数据恢复 5.停止从库的状态 6.然后到从库执行mysql命令,导入数据备份 7.设置从库同步 8.重新开启从同步 9.查看同步状态 10.回到主库并执行如下命令解除表锁定. 解决MySQL主从数据库没有同步的两种方法 工作的过程中发现Mysql的主从数据库没有同步 一.不同步情况 Mast

  • MySQL主从同步中的server-id示例详解

    前言 当我们搭建MySQL集群时,自然需要完成数据库的主从同步来保证数据一致性.而主从同步的方式也分很多种,一主多从.链式主从.多主多从,根据你的需要来进行设置.但只要你需要主从同步,就一定要注意server-id的配置,否则会出现主从复制异常. 在控制数据库数据复制和日志管理中,有两个重要的配置:server-id和server-uuid,他们会影响二进制日志文件记录和全局事务标识. server-id配置 当你使用主从拓扑时,一定要对所有MySQL实例都分别指定一个独特的互不相同的serve

  • MySQL数据库的主从同步配置与读写分离

    使用mysql主从复制的好处有: 1.采用主从服务器这种架构,稳定性得以提升.如果主服务器发生故障,我们可以使用从服务器来提供服务. 2.在主从服务器上分开处理用户的请求,可以提升数据处理效率. 3.将主服务器上的数据复制到从服务器上,保护数据免受意外的损失. 环境描述: 新企业要搭建架构为主从复制的mysql数据库. 主服务器(mysql-master):IP地址:192.168.48.128,mysql已安装,没有用户数据. 从服务器(mysql-slave):IP地址:192.168.48

  • MySQL 主从同步,事务回滚的实现原理

    BinLog BinLog是记录所有数据库表结构变更(例如create.alter table)以及表数据修改(insert.update.delete)的二进制日志,主从数据库同步用到的都是BinLog文件.BinLog日志文件有三种模式. STATEMENT 模式 内容:binlog 只会记录引起数据变更的 sql 语句 优势:该模式下,因为没有记录实际的数据,所以日志量和 IO 都消耗很低,性能是最优的 劣势:但有些操作并不是确定的,比如 uuid() 函数会随机产生唯一标识,当依赖 bi

  • MySQL数据库主从同步实战过程详解

    本文实例讲述了MySQL数据库主从同步实战过程.分享给大家供大家参考,具体如下: 接上一篇:MySQL数据库入门之备份数据库 安装环境说明 系统环境: [root@~]# cat /etc/redhat-release CentOS release 6.5 (Final) [root@~]# uname -r 2.6.32-431.el6.x86_64 数据库: 由于是模拟环境,主从库在同一台服务器上,服务器IP地址192.168.1.7 主库使用3306端口 从库使用3307端口 数据库数据目

  • Mysql数据库的主从同步配置

    目录 Mysql主从同步配置 1.安装两个 mysql 2.编写mysql配置文件 3.初始化数据 4.其他mysql 相关命令 Mysql主从同步配置 配置准备: 需要两个数据库 mysql 可视化工具,当然使用用命令行也可以 我这里演示使用 docker 启动两个 mysql 容器, 你也可以安装两个 mysql 前提版本一致 1.安装两个 mysql 创建 msyql 挂载目录 [root@localhost /]# mkdir -p /opt/docker/mysql1/conf/ [r

  • MySQL主从同步原理及应用

    目录 1.主从同步原理 主从同步架构图(异步同步) 主从同步流程(异步同步) 什么是binlog? binlog的3种格式 binlog格式对比 主从同步的2种方式 主从同步流程(半同步) 半同步适用场景 2.主从同步应用场景 1.主从同步原理 主从同步架构图(异步同步) 这是最常见的主从同步架构 主从同步流程(异步同步) 主库把数据变更写入binlog文件 从库I/O线程发起dump请求 主库I/O线程推送binlog至从库 从库I/O线程写入本地的relay log文件(与binlog格式一

  • mysql主从同步原理及应用场景示例详解

    目录 基础知识 MySQL 主从同步的主要应用场景有: 原理 设置主从同步,还有以下几个前提: 实验环境模拟实现主从同步 首先在 docker 中拉取 mysql 5.7 版本的镜像: 通过以下命令进入到 Master 容器内部: 接下来,进入数据库: 接下来执行以下命令: 基础知识 随着业务复杂度的增加,单台 MySQL 数据库服务器已不能满足实际的需求,取而代之的是数据库服务器集群.MySQL 具有支持分布式的特性,能轻松搭建一个支持高并发的 MySQL 数据库服务器集群.在集群中我们必须保

  • 一文详解MySQL主从同步原理

    目录 1. MySQL主从同步实现方式 2. MySQL主从同步的作用 一主多从架构 双主多从架构 3. 主动同步的原理 4. 主从同步延迟问题 主从同步延迟的原因有哪些? 主从同步延迟的解决方案? 5. 如何提升主从同步性能 从库开启多线程复制 修改同步模式,改为异步 修改从库Bin Log配置 知识点总结 1. MySQL主从同步实现方式 MySQL主从同步是基于Bin Log实现的,而Bin Log记录的是原始SQL语句. Bin Log共有三种日志格式,可以binlog_format配置

  • MySQL主从同步原理介绍

    概述 Mysql的Replication(复制)是一个异步的复制过程,从一个 Mysql instance(我们称之为 Master)复制到另一个Mysql instance(我们称之 Slave).在 Master 与 Slave之间的实现整个复制过程主要由三个线程来完成,其中两个线程(Sql线程和IO线程)在 Slave 端,另外一个线程(IO线程)在Master端. 主从同步需求 要实现 MySQL 的 Replication ,首先必须打开 Master 端的BinaryLog(mysq

  • Mysql主从同步的实现原理

    1.什么是mysql主从同步? 当master(主)库的数据发生变化的时候,变化会实时的同步到slave(从)库. 2.主从同步有什么好处? 水平扩展数据库的负载能力. 容错,高可用.Failover(失败切换)/High Availability 数据备份. 3.主从同步的原理是什么? 首先我们来了解master-slave的体系结构. 如下图: 不管是delete.update.insert,还是创建函数.存储过程,所有的操作都在master上.当master有操作的时候,slave会快速的

  • 详解Mysql主从同步配置实战

    1.Introduction 之前写过一篇文章:Mysql主从同步的原理. 相信看过这篇文章的童鞋,都摩拳擦掌,跃跃一试了吧? 今天我们就来一次mysql主从同步实战! 2.环境说明 os:ubuntu16.04 mysql:5.7.17 下面的实战演练,都是基于上面的环境.当然,其他环境也大同小异. 3.进入实战 工具 2台机器: master IP:192.168.33.22 slave  IP:192.168.33.33 master机器上的操作 1.更改配置文件 我们找到文件 /etc/

  • MySQL主从同步机制与同步延时问题追查过程

    前言 作为一名DBA,在工作中会经常遇到一些MySQL主从同步延迟的问题,这些同步慢的问题,其实原因非常多,可能是因为主从的网络问题导致,可能是因为网络带宽问题导致,可能是因为大事务导致,也可能是因为单线程复制导致的延迟. 今天遇到一个问题,Mysql持续报错,主从同步延时数过大或错误.所以这篇文章给大家分享下主从同步的机制原理以及问题排查思路. 故障表现 最直观的表现为: mysql> show slave status\G; // 状态一 Seconds_Behind_Master: NUL

  • Mysql主从同步Last_IO_Errno:1236错误解决方法

    Mysql主从同步的Last_IO_Errno:1236错误是什么原因呢,我们要如何来解决这个问题呢?下面和小编一起来看看关于此问题的记录与解决办法. <script>ec(2);</script> 从服务器错误代码: Last_IO_Errno: 1236 Last_IO_Error: Got fatal error 1236 from master when reading data from binary log: 'Slave can not handle replicat

随机推荐