MYSQL主从复制的几种方式

MySQL 主从复制主要有以下几种方式:
  •  基于 SQL 语句的复制(statement-based replication, SBR);
  •  基于行的复制(row-based replication, RBR);
  • 混合模式复制(mixed-based replication, MBR);
  •  基于 SQL 语句的方式最古老的方式,也是目前默认的复制方式,后来的两种是 MySQL 5 以后才出现的复制方式。

RBR 的优点:

  •  任何情况都可以被复制,这对复制来说是最安全可靠的
  • 和其他大多数数据库系统的复制技术一样
  •  多数情况下,从服务器上的表如果有主键的话,复制就会快了很多

RBR 的缺点:

  • binlog 大了很多
  •  复杂的回滚时 binlog 中会包含大量的数据
  • 主服务器上执行 UPDATE 语句时,所有发生变化的记录都会写到 binlog 中,而 SBR 只会写一次,这会导致频繁发生 binlog 的并发写问题
  • 无法从 binlog 中看到都复制了写什么语句

SBR 的优点:

  • 历史悠久,技术成熟 binlog 文件较小
  • binlog 中包含了所有数据库更改信息,可以据此来审核数据库的安全等情况
  • binlog 可以用于实时的还原,而不仅仅用于复制
  • 主从版本可以不一样,从服务器版本可以比主服务器版本高

SBR 的缺点:

  •  不是所有的 UPDATE 语句都能被复制,尤其是包含不确定操作的时候。
  •  复制需要进行全表扫描(WHERE 语句中没有使用到索引)的 UPDATE 时,需要比 RBR 请求更多的行级锁
  •  对于一些复杂的语句,在从服务器上的耗资源情况会更严重,而 RBR 模式下,只会对那个发生变化的记录产生影响 数据表必须几乎和主服务器保持一致才行,否则可能会导致复制出错
  • 执行复杂语句如果出错的话,会消耗更多资源。


无论选择哪种方式复制,都会影响到复制的效率以及服务器的损耗,甚以及数据一致性性问题,目前其实没有很好的客观手手段去评估一个系统更适合哪种方式的复制。

第二个问题是关于主从同步的监控问题,MySQL 有主从同步的状态信息,可以通过命令 show slave status获取,除了获知当前是否主从同步正常工作,另外一个重要指标就是 Seconds_Behind_Master,从字面理解,它表示当前 MySQL 主从数据的同步延迟,单位是秒,但这个指标从 DBA 的角度并不能简单的理解为延迟多少秒,感兴趣的同学可以自己去研究,但对于应用来说,简单的认为是主从同步的时间差就可以了,另外,当主从同步停止以后,重新启动同步,这个数值可能会是几万秒,取决于主从同步停止的时间长短,我们可以认为数据此时有很多天没有同步了,而这个数值越接近零,则说明主从同步延迟最小,我们可以采集这个指标并汇聚曲线图,来分析我们的数据库的同步延迟曲线,然后根据此曲线,给出一个合理的阀值,主从同步的时延小于阀值时,我们认为从库是同步的,此时可以安全的从从库读取数据。

你可能感兴趣的:(数据库)