Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Advantages and Disadvantages of Statement-Based and Row-Based Replication

19.2.1.1 基于语句和基于行的复制的优缺点

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

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

  • 写入日志文件的数据较少。当更新或删除影响许多行时,这将导致日志文件所需的存储空间大大减少。这也意味着可以更快地创建和恢复备份。

  • 日志文件包含所有更改数据库的语句,因此可以用于审核数据库。

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

    Note

    更新 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 变量,如果启用它将添加一个 Rows_query 事件到 mysqlbinlog 输出中,当使用 -vv 选项时。

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