mysql replication

111 阅读1分钟

replication架构

  • Fabirc:实现了HA和sharding

    • Failover:发现primary失败后,从secondaries中选择一个提升为primary
    • Router:failover后,会直接更新state store,client可以直接从state store中获得primary的地址
  • Cluster:与fabirc不同,实现的是数据的水平切割,每个节点的数据集都是总数据集的一部分

replication模式

  • Asynchronous:在master成功后,直接返回
  • Semi-synchronous:在master成功后,在一定时间点内等待某个节点replicate成功;若失败了,则转为Asynchronous

日志模式

slave从master上获取binglog信息,并在本地重新执行这些变更操作,成为重放日志,并且按照日志中记录的信息不同,分为SBR、RBR、混合三种模式

SBR

statement-based replication,将SQL语句写入日志,slave拉取后,直接执行原生的SQL

  • 优点:由于只是原生SQL,所以日志量会变得很小

  • 缺点:存在不一致性的场景

    • 使用 UDF,存在SQL依赖实际执行的时机
    • 使用update或delete使用limit但没有使用order by,slave可能与master执行不一致
    • 使用RAND、SYSDATE、UUID等,依赖执行本地系统
    • AUTO_INCREMENT 也会带来不一致性,除非采用阻塞模式

RBR

row-based replication,将每行数据的变更内容写入日志,slave拉取后,根据记录详情执行insert or delete

  • 优点:使用更少的行锁,slave并发能力更强
  • 缺点:一条update会对应多条insert,日志量巨大

混合模式

mix-format replication,由数据库决定是用SBR还是RBR

参考资料