mysql 主从有哪几种模式_Mysql数据库主从复制,有哪些坑?

应用背景

为了提高应用数据库的整体性能,通常情况下需要配置Mysql数据的读写分离,也就是一主多从的模式;数据库的写只发生在master角色的节点上,读发生在slave节点上,从而提高了数据库的读的吞吐量。问题:Mysql数据库是通过那些方式实现主从复制的呢?

Mysql数据库通过日志的方式实现主从复制,也就是常说的binlog,通常具有两种方式:

基于语句(Statement-based replication)和基于行(Row-based replication)(以下简称SBR,RBR);问题:SBR(基于语句)有什么优点,又有什么缺点呢?

实现方式:当leader收到客户端的请求,也就是执行语句,然后将每一个insert,update,delete语句发送给slave节点;

优点:因为直接发送执行语句,所以会产生比较少的日志数量;并且当机器因为故障停机需要备份时,可以很快的完成数据的恢复;

缺点:sql语句含有不确定的函数时,比如Now()或者Rand(),会使每一个slave节点产生不同的值,造成主从不一致;

sql表定义中auto_incrementde列或者依赖已存在的数据的语句,比如update ...where ..condition...,需要每个slave角色节点与master节点的执行顺序抑制,否则也会造成主从不一致的现象。

问题:RBR(基于行)有什么优点,又有什么缺点呢?

实现方式:

插入:对于插入,日志中会包含表定义所有列的值。

删除:删除会包含足够的信息标识需要删除的行,通常情况下是表中的主键;如果表中没有主键,日志会记录需要删除行的旧值;

更新:更新操作会包含信息标识需要删除的行,并包含更新列的新值;

优点:因为日志中记录的是表数据修改的逻辑日志,对于主从复制模式没有数据不一致的现象出现;

相比SBR模式的复制模式,对于insert,udpate 和update语句会减少锁住行的数量,相应地提高数据库的并发。

缺点:RBR模式相比SBR模式会产生更多的日志文件;对于数据修改语句(DML)比如update、delete会把每一行的数据修改都会产生一条日志;

在日志中,不能看到用户执行的sql语句,只能看到每一行数据列的变化;

对于BLOB等类型大的数据类型,会产生较大的主从复制延迟。总结

Mysql数据库目前支持SBR,RBR和MIXED三种方式,通过数据库的配置文件(my.cnf)可以通过修改binlog的的复制模式,新版本的Mysql会根据执行的语句,动态选择日志复制方式;比如DDL语句会以SBR的方式复制,而DML语句一般选用RBR的方式进行日志记录;而像GRANT,REVOKE等语句已定会采用SBR的模式记录日志;

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值