MST

星途 面试题库

面试题:MySQL中基于语句与基于行的复制机制在数据一致性方面有何差异

请阐述MySQL基于语句的复制机制(Statement - Based Replication, SBR)和基于行的复制机制(Row - Based Replication, RBR)在保证数据一致性上的不同方式与特点。
26.6万 热度难度
数据库MySQL

知识考点

AI 面试

面试题答案

一键面试

基于语句的复制机制(SBR)

  1. 数据一致性保证方式
    • 主库将执行的SQL语句记录到二进制日志(binlog)中,从库通过重放这些SQL语句来保持与主库的数据一致。例如,主库执行 INSERT INTO users (name, age) VALUES ('John', 25),这条语句会被记录到binlog,从库读取并执行相同语句来插入相同数据。
  2. 特点
    • 优点
      • 日志量小:只记录执行的SQL语句,相比于记录每一行数据的变化,日志量通常较小,在网络传输和存储方面更节省资源。例如,对一张有1000行数据的表执行 UPDATE users SET age = age + 1,SBR只记录这一条SQL语句,而不是1000行数据的变化。
      • 可读性强:由于记录的是SQL语句,DBA可以直接查看binlog中的语句,理解数据变更的逻辑,便于调试和故障排查。
    • 缺点
      • 一致性风险:某些情况下可能导致主从数据不一致。例如,使用了一些不确定的函数(如 NOW()RAND() 等),主从库执行时由于时间或随机数生成不同,可能得到不同结果。若主库执行 INSERT INTO logs (time) VALUES (NOW()),主从库记录的时间可能不同。
      • 部分操作复制困难:对于一些复杂的存储过程或触发器,可能由于主从环境差异导致复制失败,因为从库重放SQL语句时可能无法完全模拟主库的执行环境。

基于行的复制机制(RBR)

  1. 数据一致性保证方式
    • 主库将数据行的实际变化记录到二进制日志中。例如,对 users 表中某一行数据进行更新,主库会记录该行更新前后的具体数据内容,从库根据这些记录直接修改对应的数据行,从而保证数据一致性。
  2. 特点
    • 优点
      • 数据一致性高:记录的是实际数据行的变化,避免了因SQL语句执行环境差异导致的主从数据不一致问题,能更准确地保证主从数据的一致性。例如,即使使用了 NOW() 等不确定函数,只要主库数据行变化记录准确,从库按记录更新数据,就能保证数据一致。
      • 复制复杂操作可靠:对于存储过程、触发器等复杂操作的复制更加可靠,因为不依赖于SQL语句的重放,而是直接根据数据行变化进行复制。
    • 缺点
      • 日志量大:需要记录每一行数据的变化,日志量通常比SBR大很多。例如,对一张有1000行数据的表执行 UPDATE users SET age = age + 1,RBR需要记录1000行数据更新前后的内容,相比SBR记录一条SQL语句,日志量大幅增加。
      • 可读性差:binlog记录的是数据行变化,不易直接阅读和理解数据变更逻辑,调试和故障排查相对困难。