MySQL复制/.../ 基于语句和基于行复制的优缺点

5.1.1语句复制和行复制的优缺点

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

基于语句的复制的优点

  • 成熟的技术。

  • 更少的数据写入日志文件。当更新或删除影响许多行时,会导致日志文件存储空间较少。这也意味着从备份中获取和恢复可以更快地完成。

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

基于语句复制的缺点

基于行复制的优点

  • 所有更改都可以复制。这是最安全的复制方式。

    请注意

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

    对于以下语句创建表…选择,一个创建语句是从表定义生成的,并使用基于语句的格式复制,而行插入则使用基于行的格式复制。

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

  • 任何副本上所需的行锁都更少插入更新,或删除声明。

基于行复制的缺点

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

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

  • 您无法在副本上看到从源接收并执行了哪些语句。但是,您可以看到使用哪些数据进行了更改mysqlbinlog有选项——base64-output = DECODE-ROWS而且——详细

    或者,使用binlog_rows_query_log_events变量,如果启用该变量,将添加Rows_query事件使用语句tomysqlbinlog时输出。vv选项。

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