龙空技术网

Mysql数据库主从复制,有哪些坑?

璃笙自外 174

前言:

今天我们对“mysql主从复制缺点”都比较关心,我们都需要剖析一些“mysql主从复制缺点”的相关知识。那么小编在网摘上收集了一些对于“mysql主从复制缺点””的相关知识,希望同学们能喜欢,我们一起来了解一下吧!

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

问题:Mysql数据库是通过那些方式实现主从复制的呢?

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

基于语句(Statement-based replication)和基于行(Row-based replication)(以下简称SBR,RBR);

实现方式:当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的方式进行日志复制方式;ANT,REVOKE等语句一定会采用SBR的模式记录日志;

标签: #mysql主从复制缺点