暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

【ACDU翻译】MySQL 17.2.1.1 基于语句和基于行的复制的优缺点

原创 由迪 2022-09-06
373

每种二进制日志格式都有优点和缺点。对于大多数用户来说,混合复制格式应该提供数据完整性和性能的最佳组合。但是,如果您想在执行某些任务时利用特定于基于语句或基于行的复制格式的功能,您可以使用本节中的信息,其中提供了它们相对优缺点的摘要,以确定最适合您的需求。

基于语句的复制的优点
  • 成熟的技术。
  • 写入日志文件的数据更少。当更新或删除影响许多行时,这会导致 日志文件所需的存储空间*大大减少。*这也意味着可以更快地完成从备份中获取和恢复的工作。
  • 日志文件包含进行任何更改的所有语句,因此它们可用于审计数据库。
基于语句的复制的缺点
基于行的复制的优点
  • 所有更改都可以复制。这是最安全的复制形式。

    笔记

    更新系统模式中的信息的语句 mysql(例如 GRANTREVOKE触发器、存储例程(包括存储过程)和视图的操作)都使用基于语句的复制复制到副本。

    对于诸如 CREATE TABLE ... SELECTCREATE 语句,从表定义生成语句并使用基于语句的格式进行复制,而行插入使用基于行的格式进行复制。

  • 对于以下类型的语句,源上需要更少的行锁,从而实现更高的并发性:

  • INSERT对于任何、 UPDATEDELETE语句 , 副本上需要的行锁更少 。

基于行的复制的缺点
  • RBR 可以生成更多必须记录的数据。要复制 DML 语句(例如 UPDATEor DELETE语句),基于语句的复制仅将语句写入二进制日志。相比之下,基于行的复制将每个更改的行写入二进制日志。如果语句更改了很多行,基于行的复制可能会向二进制日志写入更多数据;即使对于回滚的语句也是如此。这也意味着制作和恢复备份可能需要更多时间。另外,写入数据时二进制日志被锁定的时间较长,可能会导致并发问题。利用 binlog_row_image=minimal大大减少劣势。

  • 生成大 BLOB值的确定性可加载函数使用基于行的复制进行复制比使用基于语句的复制花费更长的时间。这是因为 BLOB记录的是列值,而不是生成数据的语句。

  • 您无法在副本上看到从源接收并执行了哪些语句。但是,您可以使用带有选项的 mysqlbinlog--base64-output=DECODE-ROWS--verbose.

    或者,使用该 binlog_rows_query_log_events 变量,如果启用 该变量,则在使用该选项 时将Rows_query带有语句的事件添加到 mysqlbinlog输出 。-vv

  • 对于使用存储引擎的表,与将它们作为语句应用时相比,将它们作为基于行的事件应用到二进制日志时,语句MyISAM 的副本需要更强的锁定。INSERT这意味着MyISAM在使用基于行的复制时不支持对表进行并发插入。

「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论

目录
  • 基于语句的复制的优点
  • 基于语句的复制的缺点
  • 基于行的复制的优点
  • 基于行的复制的缺点