笔记---复制

时间:2022-10-26 16:21:45

一.什么是复制?

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

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

二. 为什么要复制?

保持主从一致:

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

三.复制原理

笔记---复制

步骤

  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)独立线程,从库并行更新

九. 复制问题汇总