文档首页
MySQL 9.0 参考手册
相关文档 下载本手册
PDF (US Ltr) - 40.0Mb
PDF (A4) - 40.1Mb
手册页 (TGZ) - 258.2Kb
手册页 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 9.0 参考手册  /  ...  /  语句式和行式复制的优缺点

19.2.1.1 语句式和行式复制的优缺点

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

语句式复制的优点
  • 成熟的技术。

  • 写入日志文件的数据更少。当更新或删除影响许多行时,这会导致 大大 减少日志文件所需的存储空间。这也意味着备份和还原操作可以更快地完成。

  • 日志文件包含所有进行了任何更改的语句,因此它们可以用于审计数据库。

语句式复制的缺点
基于行的复制的优点
  • 所有更改都可以复制。这是最安全的复制形式。

    注意

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

    对于CREATE TABLE ... SELECT 等语句,将从表定义生成CREATE 语句,并使用基于语句的格式复制,而行插入则使用基于行的格式复制。

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

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

基于行的复制的缺点
  • RBR 可能会生成更多必须记录的数据。要复制 DML 语句(例如UPDATEDELETE 语句),基于语句的复制只将该语句写入二进制日志。相比之下,基于行的复制将每个更改的行写入二进制日志。如果该语句更改了许多行,基于行的复制可能会将更多数据写入二进制日志;即使是回滚的语句也是如此。这也意味着创建和还原备份可能需要更多时间。此外,二进制日志被锁定更长的时间来写入数据,这可能会导致并发问题。使用binlog_row_image=minimal 可以大幅减少这种缺点。

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

  • 您无法在副本上看到从源服务器接收并执行的语句。但是,您可以使用mysqlbinlog 以及选项--base64-output=DECODE-ROWS--verbose 查看更改的数据。

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

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