zoukankan      html  css  js  c++  java
  • <深入浅出mysql>笔记---复制

    一.什么是复制?

    主库DDL,DML操作通过++BinLog++传给从库重做。

    • DDL--数据定义语言,create,drop,alter
    • DML--数据操作语言,insert,delete,update,select
    • 重做:对数据变更日志重执行

    二. 为什么要复制?

    保持主从一致:

    • 主库错误,切换从库
    • 从库查询(实时要求低),读写分离;
    • 从库备份

    三.复制原理

    mysql复制

    步骤

    1. 主库数据更改事件记录到BinLog
      2.从库发起IO线程连接主库
    2. 主库通过Binlog dump线程推送BinLog事件给从库RelayLog(中继日志
    3. 从库SQL线程按RelayLog重做

    三线程

    从库

    • IO线程--连接主库
    • SQL线程--读取relaylog重做

    主库

    • Binlog dump线程--读取数据库事件发送给IO线程

    四. 复制三种方式

    statement语句级
    row行级
    语句或行混合

    1.语句级复制(Statement-based replication)

    每条修改数据的SQL均记录

    2.行级复制

    • 记录每行数据变化,除原始SQL外
    • 日志量大

    3.行或语句复制(mixed)

    • 默认statement
    • 有时切到Row(SQL含时间,用户相关的函数时)

    五.复制四种日志

    Binlog
    Relaylog
    master.info
    Relay-log.info

    1. Binlog(二进制日志)

    1. 内容
      select外的所有数据修改操作
    2. 三种格式
    • statement
    • row
    • mixed

    2. Relaylog

    • 内容同Binlog
    • 重做完自动删除Relaylog

    3. master.info

    • 记录从库复制主库Binlog进度

    从库创建

    4. relay-log.info

    • 记录从库应用relaylog进度

    从库创建

    六.复制三种架构

    一主多从
    多级
    双主
    双主多级

    1.一主多从复制

    读写分离

    • 读-->从库(实时性低)
    • 写-->主库(实时性高)
    • 存在IO负载和网络压力
      一主多从

    2.多级复制

    • binlog仅推送给master2
    • 优点:解决了主库IO负载和网络压力
    • 缺点:延时
    • 解决办法:

    Master2表引擎设为blackhole(写入表数据仅记录Binlog,不回写磁盘)

    多级复制

    3.双主复制

    • Master1/Master2互为主从
    • 写访问M1,读访问M2
    • 优点:避免搭建额外从库
    • 场景:异地办公室
      双主复制

    4.双主多级(级联)复制

    双主多级复制

    七. 复制两种方式

    异步复制
    半同步复制

    1. 异步复制

    • 主库commit--写入binlog--返回client
    • 主从延迟--不一致
      异步复制

    2. 同步复制

    主库commit--从库收到Binlog--写入relaylog--返回client

    半同步复制

    八. 主从复制延时解决方案

    写入压力较大时

    1. 提高从库硬件配置

    2. 架构优化(推荐)

    1) 分表复制

    思想:

    不同从库复制不同库/表 -- 热点分散

    设置参数replicate-do-db/table/replicate-ignore-db/table实现
    分表复制

    2)多线程复制(schema based)

    思想:

    每个schema(database)独立线程,从库并行更新

    九. 复制问题汇总

  • 相关阅读:
    pycharm 安装第三方库,出现错误: error: Microsoft Visual C++ 14.0 is required. Get it with "Microsoft Visual C++ Build Tools": http://landinghub.visual studio.com/visual-cpp-build-tools
    c# 开发常用小方法
    [LeetCode]28. 实现 strStr()
    [LeetCode]27. 移除元素
    [LeetCode]21. 合并两个有序链表
    [LeetCode]20. 有效的括号
    [LeetCode]14. 最长公共前缀
    [LeetCode]13. 罗马数字转整数
    [LeetCode]9. 回文数
    [LeetCode]2. 两数相加
  • 原文地址:https://www.cnblogs.com/pennli/p/8795072.html
Copyright © 2011-2022 走看看