概念

MySQL 主从复制是指数据可以从一个MySQL数据库服务器主节点复制到一个或多个从节点。MySQL 默认采用异步复制方式,这样从节点不用一直访问主服务器来更新自己的数据,数据的更新可以在远程连接上进行,从节点可以复制主数据库中的所有数据库或者特定的数据库,或者特定的表

主要用途

1. 读写分离

在开发工作中,有时候会遇见某个sql 语句需要锁表,导致暂时不能使用读的服务,这样就会影响现有业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。

2. 数据实时备份

当系统中某个节点发生故障时,可以方便的故障切换

3. 高可用HA和架构扩展

随着系统中业务访问量的增大,如果是单机部署数据库,就会导致I/O访问频率过高。有了主从复制,增加多个数据存储节点,将负载分布在多个从节点上,降低单机磁盘I/O访问的频率,提高单个机器的I/O性能。

主从形式

1. 一主一从


一主多从,提高系统的读性能。一主一从和一主多从是最常见的主从架构,实施起来简单并且有效,不仅可以实现HA,而且还能读写分离,进而提升集群的并发能力。

2. 多主一从 (从5.7开始支持)


多主一从可以将多个mysql数据库备份到一台存储性能比较好的服务器上。

3. 双主复制

双主复制,也就是互做主从复制,每个master既是master,又是另外一台服务器的slave。这样任何一方所做的变更,都会通过复制应用到另外一方的数据库中。

4. 级联复制

级联复制模式下,部分slave的数据同步不连接主节点,而是连接从节点。因为如果主节点有太多的从节点,就会损耗一部分性能用于replication,那么我们可以让3~5个从节点连接主节点,其它从节点作为二级或者三级与从节点连接,这样不仅可以缓解主节点的压力,并且对数据一致性没有负面影响。

主从复制原理

MySQL主从复制涉及到三个线程,一个运行在主节点(log dump thread),其余两个(I/O thread, SQL thread)运行在从节点,如下图所示:

1. 主节点 binary log dump 线程

当从节点连接主节点时,主节点会创建一个log dump 线程,用于发送bin-log的内容。在读取bin-log中的操作时,此线程会对主节点上的bin-log加锁,当读取完成,甚至在发动给从节点之前,锁会被释放。

2.从节点I/O线程

当从节点上执行start slave命令之后,从节点会创建一个I/O线程用来连接主节点,请求主库中更新的bin-log。I/O线程接收到主节点binlog dump 进程发来的更新之后,保存在本地relay-log中。

3.从节点SQL线程

SQL线程负责读取relay log中的内容,解析成具体的操作并执行,最终保证主从数据的一致性。

对于每一个主从连接,都需要三个进程来完成。当主节点有多个从节点时,主节点会为每一个当前连接的从节点建一个binary log dump 进程,而每个从节点都有自己的I/O进程,SQL进程。从节点用两个线程将从主库拉取更新和执行分成独立的任务,这样在执行同步数据任务的时候,不会降低读操作的性能。比如,如果从节点没有运行,此时I/O进程可以很快从主节点获取更新,尽管SQL进程还没有执行。如果在SQL进程执行之前从节点服务停止,至少I/O进程已经从主节点拉取到了最新的变更并且保存在本地relay日志中,当服务再次起来之后,就可以完成数据的同步。

要实施复制,首先必须打开Master 端的binary log(bin-log)功能,否则无法实现。

因为整个复制过程实际上就是Slave 从Master 端获取该日志然后再在自己身上完全顺序的执行日志中所记录的各种操作。如下图所示:

复制的基本过程如下:

  • 从节点上的I/O 进程连接主节点,并请求从指定日志文件的指定位置(或者从最开始的日志)之后的日志内容;
  • 主节点接收到来自从节点的I/O请求后,通过负责复制的I/O进程根据请求信息读取指定日志指定位置之后的日志信息,返回给从节点。返回信息中除了日志所包含的信息之外,还包括本次返回的信息的bin-log file 的以及bin-log position;从节点的I/O进程接收到内容后,将接收到的日志内容更新到本机的relay log中,并将读取到的binary log文件名和位置保存到master-info 文件中,以便在下一次读取的时候能够清楚的告诉Master“我需要从某个bin-log 的哪个位置开始往后的日志内容,请发给我”
  • Slave 的 SQL线程检测到relay-log 中新增加了内容后,会将relay-log的内容解析成在祝节点上实际执行过的操作,并在本数据库中执行。

主从复制模式

MySQL 主从复制默认是异步的模式。MySQL增删改操作会全部记录在binary log中,当slave节点连接master时,会主动从master处获取最新的bin log文件。并把bin log中的sql relay。

1. 异步模式

异步模式如下图所示,这种模式下,主节点不会主动push bin log到从节点,这样有可能导致failover的情况下,也许从节点没有即时地将最新的bin log同步到本地

全同步模式

全同步模式是指主节点和从节点全部执行了commit并确认才会向客户端返回成功

总结

Mysql 主从复制是mysql 高可用,高性能的基础,有了这个基础,mysql 的部署会变得简单、灵活并且具有多样性,从而可以根据不同的业务场景做出灵活的调整。

数据库的主从复制原理(超级详细)相关推荐

  1. Linux基础学习八:mysql主从复制原理以及详细搭建步骤

    MySQL的主从复制 MySQL的主从复制,指的是可以创建多台和主数据库完全一样的数据库环境(从数据库),对主数据库的写操作(增.删.改)会自动同步到子数据库中. 作用: 从数据库作作为冷备机,进行日 ...

  2. 数据库设计步骤(超级详细)|数据库

    数据库设计 我们先来看这样一个问题 假如遇到下面这样的设计需求,我们如何完成数据库的设计呢? 设计需求: 假设商品经销商有基本实体集:供应商Vendors.产品目录Products.顾客信息Custo ...

  3. Django的简单介绍及虚拟环境的搭建、创建项目,数据库(Windows版超级详细)--Python web应用程序开发(Python实战)

    https://blog.csdn.net/hanhanwanghaha宝藏女孩 欢迎您的关注! 欢迎关注微信公众号:宝藏女孩的成长日记 如有转载,请注明出处(如不注明,盗者必究) 目录 Djangg ...

  4. 数据库基础内容(超级详细)

    数据库基础 文章目录 数据库基础 数据库基本概念 概述: MySql运行机制: 数据库结构简介 数据库软件 Mysql安装准备: Mysql服务安装 MySQL卸载: Mysql登录: SQL语言的概 ...

  5. MySQL数据库安装-Windows10为例【超级详细安装过程(每一步的截图)、检测安装是否成功、登录数据库并查看版本号、将MySQL添加到环境变量中、在命令行窗口操作数据库】

    哈哈,这是在哔哩哔哩网站上 看的 MySQL安装步骤. 我安装的时候,截截图,希望对大家 有所帮助. 链接:https://pan.baidu.com/s/1fKFQCVHMQOmbg84UyGrKB ...

  6. Intellij IDEA 通过数据库表逆向生成带注释的实体类文件超级详细步骤,附详细解决方案

    Intellij IDEA 通过数据库表逆向生成带注释的实体类文件超级详细步骤,附详细解决方案 参考文章: (1)Intellij IDEA 通过数据库表逆向生成带注释的实体类文件超级详细步骤,附详细 ...

  7. mysql+数据库主从原理_MySQL主从复制原理及实现

    MySQL主从复制原理 MySQL主从复制主要基于MySQL的BIN log日志,bin log 日志中包含了几乎所有mysql增删改查的语句,所以bin log日志也是mysql用户备份和数据恢复的 ...

  8. mysql主从复制原理详解_MySQL主从复制没使用过?三大步骤让你从原理、业务上理解透彻...

    成长是一棵树,总是在你不知不觉的情况下快乐长大:成长是一株草,总是在你不知不觉的情况下长满大地:成长是一朵花,总是在你不知不觉的情况下开满山头. 这不,随着时间的迁移.项目网站的用户量.数据量持续上升 ...

  9. mysql 多项式_mysql主从复制原理及实现

    一.主从复制原理 利用MySQL提供的Replication,其实就是Slave从Master获取Binary log文件,然后再本地镜像的执行日志中记录的操作.由于主从复制的过程是异步的,因此Sla ...

  10. mysql主从应用_MySQL主从复制应用、主从复制原理

    mysql主从复制安装配置 1.基础设置准备 #操作系统: centos6.5 #mysql版本: 5.7 #两台虚拟机: node1:192.168.85.111(主) node2:192.168. ...

最新文章

  1. linux终端 多标签,Linux有问必答:如何在 Ubuntu 15.04 的 GNOME 终端中开启多个标签...
  2. 员工培训案例分析答案_在职员工培训管理办法案例
  3. 依次提取二进制1位置的数字,
  4. Qt工作笔记-视图(QGraphicsView)的放大和缩小(通过滚轮)
  5. idea maven列表有问题的
  6. shell 变量自增(转)
  7. 【排序算法】冒泡排序
  8. dell 工作站装linux_个人电脑只装Linux是怎样的体验?
  9. DPDK Release 21.11
  10. JAVA九宫格拼图游戏怎么计时_九宫格拼图怎么拼 如何玩转九宫格拼图游戏
  11. 【读书笔记】淘宝技术这十年
  12. 延时消息推送的正确姿势你get到了吗?
  13. frp客户端进行windows远程桌面连接
  14. mathmatica中ListLinePlot函数画图不能混合是咋回事啊
  15. JAVA宠物医院管理系统计算机毕业设计Mybatis+系统+数据库+调试部署
  16. Linux 时间一致性环境NTP/Chrony服务器部署配置
  17. 2022.11.15【bug笔记】|Error in FASTQ file at line 55: Line expected to start with ‘+‘, but found ‘G‘
  18. python3 冒泡排序 快速排序
  19. docker 网络模式研究了许久,其实我们需要的是docker run -p 80:80命令
  20. 让人变年轻的特效怎么做?教你制作变年轻特效小妙招

热门文章

  1. 易辅客栈多线程脚本与中控台开发
  2. 物联网服务器搭建记录,心得
  3. journalctl工具基础介绍
  4. 3D画图软件测试自学,3D版的“画图”!Win10Paint3D上手体验
  5. QT QListView
  6. Java实现剪切MP3格式的文件_java_java实现酷狗音乐临时缓存文件转换为MP3文件的方法,本文实例讲述了java实现酷狗音 - phpStudy...
  7. Lottie动画 轻松使用
  8. 10 个超棒的 jQuery 视频插件
  9. ASP.NET Core的Telerik UI,创建数据丰富的桌面
  10. 添加logviewer用户