• mysql主从复制原理


    Mysql主从复制

    主从复制的形式:

    l 一主一从

    l 主主复制(互为主从)

    一主多从---扩展系统读取的性能,因为读是在从库读取的;

    多主一从---从5.7开始支持

    使用环境、用途优点、缺点

    l 实时灾备,用于故障切换

    l 热备份,避免影响业务

    l mysql主从复制是mysql高可用性,高性能(负载均衡)的基础

    l 简单,灵活,部署方式多样,可以根据不同业务场景部署不同结构

    在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也可以保证业务的正常运作。

    架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。

    l 复制过程中应该时刻监控复制状态,复制出错或延时可能给系统造成影响

    l 如果单做主从复制,可能造成一定的资源浪费

    l 主从复制并不是完美的架构,根据业务量或者其他因素的不同,可能会有各种误差出现

    主从原理:

    主从复制的基础是主库记录数据库的所有变更记录到binlog。binlog是数据库中保存配置中过期时间内所有修改数据库结构或内容的一个文件。如果过期时间是10d的话,那么就是最近10d的数据库修改记录。

    mysql主从复制是一个异步的复制过程,主库发送更新事件到从库,从库读取更新记录,并执行更新记录,使得从库的内容与主库保持一致。在主库里,只要有更新事件出现,就会被依次地写入到binlog里面,是之后从库连接到主库时,从主库拉取过来进行复制操作的数据源。

    binlog输出线程每当有从库连接到主库的时候,主库都会创建一个线程然后发送binlog内容到从库。对于每一个即将发送给从库的sql事件,binlog输出线程会将其锁住。一旦该事件被线程读取完之后,该锁会被释放,即使在该事件完全发送到从库的时候,该锁也会被释放。

    从库生成两个线程,一个I/O线程,一个SQL线程;

    I/O线程去请求主库 binlog(二进制日志),并将得到的binlog日志写到relay log(中继日志) 文件中;主库会生成一个 log dump 线程,用来给从库 i/o线程传binlog;

    SQL 线程会读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;

    大概步骤:

    步骤一:主库db的更新事件(update、insert、delete)被写到binlog

    l 步骤二:从库发起连接,连接到主库

    步骤三:此时主库创建一个binlog dump thread,把binlog的内容发送到从库

    步骤四:从库启动之后,创建一个I/O线程,读取主库传过来的binlog内容并写入到relay log

    步骤五:还会创建一个SQL线程,从relay log里面读取内容,从Exec_Master_Log_Pos位置开始执行读取到的更新事件,将更新内容写入到slave的db

  • 相关阅读:
    如何加快建 index 索引 的时间
    RMAN 系列(一) RMAN 体系结构概述
    RMAN 系列(二) RMAN 设置和配置
    对 Oracle 备份与恢复 的补充说明
    Oracle 11g Alert log 文件位置的问题
    Oracle 索引的维护
    分区表 之 Interval分区 和 虚拟列 按星期分区表
    Oracle 小知识 总结(一)
    如何用 SQL Tuning Advisor (STA) 优化SQL语句
    使用 Tkprof 分析 ORACLE 跟踪文件
  • 原文地址:https://www.cnblogs.com/duanlinxiao/p/10543780.html
Copyright © 2020-2023  润新知