精华内容
下载资源
问答
  • MYSQL主从同步原理

    千次阅读 2019-05-17 22:55:47
    MYSQL主从同步原理: 1) MYSQL主从同步是异步复制的过程,整个同步需要开启3线程,master上开启bin-log日志(记录数据库增、删除、修改、更新操作); 2) Slave开启I/O线程来请求master服务器,请求指定bin-log中...

    MYSQL主从用途
    1) MYSQL主从,有主库和从库,内容一般是一致,master/slave;
    2) 假设LAP(Linux+Apache+PHP)+MYSQL(单台),MYSQL属于单点故障,一旦MYSQL宕机,整合网站无法访问;
    3) 为了解决单点问题,引入MYSQL从库,从而保证网站数据库不宕机或者宕机之后能够快速恢复;
    4) MYSQL主从,主库和从库一定保持一致,如何保证主从数据一致?
    5) MYSQL主从架构,可以协助实现数据库读写分离,从而保证网站更加的稳定和可靠;

    MYSQL主从同步原理:
    1) MYSQL主从同步是异步复制的过程,整个同步需要开启3线程,master上开启bin-log日志(记录数据库增、删除、修改、更新操作);
    2) Slave开启I/O线程来请求master服务器,请求指定bin-log中position点之后的内容;
    3) Master端收到请求,Master端I/O线程响应请求,bin-log、position之后内容返给salve;
    4) Slave将收到的内容存入relay-log中继日志中,生成master.info(记录master ip、bin-log、position、用户名密码);
    5) Slave端SQL实时监测relay-log日志有更新,解析更新的sql内容,解析成sql语句,再salve库中执行;
    6) 执行完毕之后,Slave端跟master端数据保持一致!

    **MYSQL bin-log用途**
    

    1) bin-log日志最大的功能记录数据库增、删、改、插入等操作,记录用户操作的SQL语句;
    2) bin-log日志可以用数据增量备份、完整备份;
    3) bin-log还可以主要主从复制+读写分离;
    7、 MYSQL主从实战
    8、 MYSQL高可用实战

    展开全文
  • Mysql主从同步原理

    2021-03-16 19:09:41
    MYSQL主从同步原理: 1) MYSQL主从同步是异步复制的过程,整个同步需要开启3线程,master上开启bin-log日志(记录数据库增、删除、修改、更新操作); 2) Slave开启I/O线程来请求master服务器,请求指定bin-log中...

    MYSQL主从同步原理:
    1) MYSQL主从同步是异步复制的过程,整个同步需要开启3线程,master上开启bin-log日志(记录数据库增、删除、修改、更新操作);
    2) Slave开启I/O线程来请求master服务器,请求指定bin-log中position点之后的内容;
    3) Master端收到请求,Master端I/O线程响应请求,bin-log、position之后内容返给salve;
    4) Slave将收到的内容存入relay-log中继日志中,生成master.info(记录master ip、bin-log、position、用户名密码);
    5) Slave端SQL实时监测relay-log日志有更新,解析更新的sql内容,解析成sql语句,再salve库中执行;6) 执行完毕之后,Slave端跟master端数据保持一致!

    展开全文
  • MySQL主从同步原理

    2018-02-17 01:18:00
    MySQL主从同步原理 转自博客园-Aiapple:http://www.cnblogs.com/Aiapple/p/5792939.html 主从形式 mysql主从复制 灵活 一主一从 主主复制 一主多从---扩展系统读取的性能,因为读是在从库读取的; ...
    MySQL主从同步原理
    转自博客园-Aiapple:http://www.cnblogs.com/Aiapple/p/5792939.html
     
    主从形式

     
    mysql主从复制 灵活
    • 一主一从
    • 主主复制
    • 一主多从---扩展系统读取的性能,因为读是在从库读取的;
    • 多主一从---5.7开始支持
    • 联级复制---
     
     
    用途及条件

     
    mysql主从复制用途
    • 实时灾备,用于故障切换
    • 读写分离,提供查询服务
    • 备份,避免影响业务
     
    主从部署必要条件:
    • 主库开启binlog日志(设置log-bin参数)
    • 主从server-id不同
    • 从库服务器能连通主库
     
    主从原理

    mysql主从复制原理
     

     

    1)开启binlog后,主库会生成一个 log dump 线程,用来给从库I/O线程传binlog;
    2)开启slave后,从库生成两个线程,一个I/O线程,一个SQL线程;
    3)I/O线程会去请求主库的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
    4)SQL线程会去读取relay log文件中的日志,并解析成具体操作,来实现主从的操作一致,而最终数据一致;
     
    问题及解决方法

     
    mysql主从复制存在的问题:
    • 主库宕机后,数据可能丢失
    • 从库只有一个sql Thread,主库写压力大,复制很可能延时
     
    解决方法:
    • 半同步复制---解决数据丢失的问题
    • 并行复制----解决从库复制延迟的问题
     
    半同步复制

     
    mysql semi-sync(半同步复制)
    半同步复制:
    • 5.5集成到mysql,以插件的形式存在,需要单独安装
    • 确保事务提交后binlog至少传输到一个从库
    • 不保证从库应用完这个事务的binlog
    • 性能有一定的降低,响应时间会更长
    • 网络异常或从库宕机,卡主主库,直到超时或从库恢复
     
    主从复制--异步复制原理

     

    半同步复制原理:
     

     

    并行复制

     
    mysql并行复制
    • 社区版5.6中新增
    • 并行是指从库多线程apply binlog
    • 库级别并行应用binlog,同一个库数据更改还是串行的(5.7版并行复制基于事务组)
    设置
    set global slave_parallel_workers=5;
    设置sql线程数为5
     
     
    其他

     
    部分数据复制
    主库添加参数:
    binlog_do_db=db1
    binlog_ignore_db=db1
    binlog_ignore_db=db2
    或从库添加参数
    replicate_do_db=db1
    replicate_ignore_db=db1
    replicate_do_table=db1.t1
    replicate_wild_do_table=db%.%
    replicate_wild_ignore_table=db1.%
     
    级联复制(常用)
    A->B->C
    B中添加参数:
    log_slave_updates
    B将把A的binlog记录到自己的binlog日志中

     

    复制的监控:
    show  slave status \G

     

    复制出错处理
    常见:1062(主键冲突),1032(记录不存在)
    解决:
    • 手动处理
    • 跳过复制错误:set global sql_slave_skip_counter=1
     
     
     
    总结

     
    • 主从形式
      • 一主一从
      • 一主多从--扩展系统读取性能
      • 多主一从--5.7开始支持
      • 主主复制
      • 联级复制
    • 用途:实时灾备的故障切换,读写分离,备份
    • 原理
      • 主:log dump线程传binlog;
        • i/o线程接受读取binlog,并写入relay log文件
        • sql线程从relay log 文件中读取binlog并持久化
    • 问题及解决
      • 主库宕机后,数据丢失
        • 半同步复制
      • 主库写压力大,因从库只有一个sql 线程来持久化,复制可能延迟
        • 并行复制
    • 半同步复制:
      • 原理
        • 事务在主库写完binlog后需要从库返回一个已接受,才放回给客户端;
      • 5.5集成到mysql,以插件的形式存在,需要单独安装
      • 确保事务提交后binlog至少传输到一个从库
      • 不保证从库应用完成这个事务的binlog
      • 性能有一定的降低
      • 网络异常或从库宕机,卡主库,直到超时或从库恢复
    • 并行复制
      • 原理:从库多线程apply binlog
      • 在社区5.6中新增
      • 库级别并行应用binlog,同一个库数据更改还是串行的
      • 5.7版本并行复制基于事务组
    • 部分数据复制
    • 级联复制(常用)
      • A->B->C
      • B中添加参数log_slave_updates
      • B将把A的binlog记录到自己的binlog日志中
    • 复制的监控
      • show slave status
    • 复制出错处理
      • 常见:1062(主键冲突),1032(记录不存在)
      • 解决:
        • 手动处理
        • 跳过复制错误:set global sql_slave_skip_counter=1
    • mysql主从复制是mysql高可用性,高性能(负载均衡)的基础
    • 简单,灵活,部署方式多样,可以根据不同业务场景部署不同复制结构
    • 复制过程中应该时刻监控复制状态,复制出错或延时可能给系统造成影响
    • mysql主从复制目前也存在一些问题,可以根据需要部署复制增强功能
     

    转载于:https://www.cnblogs.com/identified/p/8451359.html

    展开全文
  • mysql 主从同步原理

    2011-05-05 15:50:00
    mysql 主从同步原理

     

     

     

    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” 参数项。

      MySQL 复制的基本过程如下:

      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,所以两端的数据是完全一样的。

      实际上,在老版本中,MySQL 的复制实现在 Slave 端并不是由 SQL 线程和 IO 线程这两个线程共同协作而完成的,而是由单独的一个线程来完成所有的工作。但是 MySQL 的工程师们很快发现,这样做存在很大的风险和性能问题,主要如下:

       首先,如果通过一个单一的线程来独立实现这个工作的话,就使复制 Master 端的,Binary Log日志,以及解析这些日志,然后再在自身执行的这个过程成为一个串行的过程,性能自然会受到较大的限制,这种架构下的 Replication 的延迟自然就比较长了。

       其次,Slave 端的这个复制线程从 Master 端获取 Binary Log 过来之后,需要接着解析这些内容,还原成 Master 端所执行的原始 Query,然后在自身执行。在这个过程中,Master端很可能又已经产生了大量的变化并生成了大量的 Binary Log 信息。如果在这个阶段 Master 端的存储系统出现了无法修复的故障,那么在这个阶段所产生的所有变更都将永远的丢失,无法再找回来。这种潜在风险在Slave 端压力比较大的时候尤其突出,因为如果 Slave 压力比较大,解析日志以及应用这些日志所花费的时间自然就会更长一些,可能丢失的数据也就会更多。

       所以,在后期的改造中,新版本的 MySQL 为了尽量减小这个风险,并提高复制的性能,将 Slave 端的复制改为两个线程来完成,也就是前面所提到的 SQL 线程和 IO 线程。最早提出这个改进方案的是Yahoo!的一位工程师“Jeremy Zawodny”。通过这样的改造,这样既在很大程度上解决了性能问题,缩短了异步的延时时间,同时也减少了潜在的数据丢失量。

      当然,即使是换成了现在这样两个线程来协作处理之后,同样也还是存在 Slave 数据延时以及数据丢失的可能性的,毕竟这个复制是异步的。只要数据的更改不是在一个事务中,这些问题都是存在的。

      如果要完全避免这些问题,就只能用 MySQL 的 Cluster 来解决了。不过 MySQL的 Cluster 知道笔者写这部分内容的时候,仍然还是一个内存数 据库的解决方案,也就是需要将所有数据包括索引全部都 Load 到内存中,这样就对内存的要求就非常大的大,对于一般的大众化应用来说可实施性并不是太大。当然,在之前与 MySQL 的 CTO David 交流的时候得知,MySQL 现在正在不断改进其 Cluster 的实现,其中非常大的一个改动就是允许数据不用全部 Load 到内存中,而仅仅只是索引全部 Load 到内存中,我想信在完成该项改造之后的 MySQL Cluster 将会更加受人欢迎,可实施性也会更大。

     

    转自:http://machael.blog.51cto.com/829462/239112

     

    展开全文
  • 主要介绍了MySQL主从同步原理介绍,本文讲解了主从同步概述、主从同步需求、主从同步过程等内容,需要的朋友可以参考下
  • Mysql 主从同步原理

    2019-07-22 00:10:34
    概括:主从复制功能通过在主服务器和从服务器之间切分处客户查询的负荷,可以得到更好的客户响应时间 ...MySQL主从复制的特点如下 增加健壮性。主服务器出现问题时,切换到从服务器座位备份。 优化响应时间。不要同...
  • mysql主从同步原理

    2019-05-25 19:03:39
    1、在业务复杂的系统中,有这么一个情景,有一句sql语句需要锁表,导致暂时不能使用读的服务,那么就很影响运行中的业务,使用主从复制,让主库负责写,从库负责读,这样,即使主库出现了锁表的情景,通过读从库也...
  • mysql 主从同步原理

    2014-02-11 11:44:13
     Mysql的 Replication 是一个异步的复制过程,从一个 Mysql instace(我们称之为 Master)复制到另一个 Mysql instance(我们称之 Slave)。在 Master 与 Slave 之间的实现整个复制过程主要由三个线程来完成,其中两个...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 2,346
精华内容 938
关键字:

mysql主从同步原理

mysql 订阅