文档主页
MySQL 8.4 参考手册
相关文档 下载此手册
PDF (US Ltr) - 39.9Mb
PDF (A4) - 40.0Mb
手册页 (TGZ) - 258.5Kb
手册页 (Zip) - 365.5Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


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

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 选项时向 mysqlbinlog 输出添加一个包含语句的 Rows_query 事件。

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