Documentation Home
MySQL 8.4 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 39.8Mb
PDF (A4) - 39.9Mb
Man Pages (TGZ) - 257.9Kb
Man Pages (Zip) - 364.9Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


MySQL 8.4 Reference Manual  /  ...  /  Evaluation of Table-Level Replication Options

19.2.5.2 表级复制选项评估

复制服务器仅在满足以下两个条件之一时检查和评估表级选项:

首先,复制服务器检查是否启用了语句级复制。如果启用,并且语句出现在存储函数中,复制服务器执行语句并退出。如果启用了行级复制,复制服务器不知道源服务器是否在存储函数中执行语句,因此不适用这个条件。

Note

对于语句级复制,复制事件表示语句(所有更改都与单个SQL语句相关联);对于行级复制,每个事件都表示单个表行的更改(因此,语句如UPDATE mytable SET mycol = 1可能产生多个行级事件)。从事件角度看,检查表选项的过程相同,无论是语句级复制还是行级复制。

现在,如果没有表选项,复制服务器简单地执行所有事件。如果存在--replicate-do-table--replicate-wild-do-table选项,事件必须与这些选项之一匹配;否则,忽略该事件。如果存在--replicate-ignore-table--replicate-wild-ignore-table选项,执行所有事件,除了与这些选项之一匹配的事件。

Important

表级复制过滤器仅应用于明确提及的表,并且在查询中操作这些表。它们不应用于隐式更新的表。例如,GRANT语句,更新了mysql.user系统表,但不提及该表,受到指定mysql.%通配符的过滤器的影响。

以下步骤详细描述了评估的过程。开始点是数据库级选项的评估,见第19.2.5.1节,“数据库级复制和二进制日志选项评估”

  1. 是否存在表级复制选项?

    • 是。 继续步骤2。

    • 否。 执行更新并退出。

  2. 使用的日志格式是什么?

    • STATEMENT。 进行剩余步骤,对于每个执行更新的语句。

    • ROW.  对表行进行剩余步骤的更新。

  3. 是否存在--replicate-do-table选项?

    • 是.  表是否匹配其中之一?

      • 是.  执行更新并退出。

      • 否.  继续到步骤4。

    • 否.  继续到步骤4。

  4. 是否存在--replicate-ignore-table选项?

    • 是.  表是否匹配其中之一?

      • 是.  忽略更新并退出。

      • 否.  继续到步骤5。

    • 否.  继续到步骤5。

  5. 是否存在--replicate-wild-do-table选项?

    • 是.  表是否匹配其中之一?

      • 是.  执行更新并退出。

      • 否.  继续到步骤6。

    • 否.  继续到步骤6。

  6. 是否存在--replicate-wild-ignore-table选项?

    • 是.  表是否匹配其中之一?

      • 是.  忽略更新并退出。

      • 否.  继续到步骤7。

    • 否.  继续到步骤7。

  7. 是否还有表需要测试?

    • 是.  回到步骤3。

    • 否.  继续到步骤8。

  8. 是否存在--replicate-do-table--replicate-wild-do-table选项?

    • 是.  忽略更新并退出。

    • 否.  执行更新并退出。

Note

语句级别复制如果一个 SQL 语句同时操作一个被--replicate-do-table--replicate-wild-do-table选项指定的表和一个被--replicate-ignore-table--replicate-wild-ignore-table选项指定的表,复制将停止。复制服务器必须么执行或忽略整个语句(形成复制事件),而不能逻辑地执行这两者。对于 DDL 语句,这也适用于行级别复制,因为 DDL 语句总是以语句形式记录,而不考虑记录格式的影响。只有在使用binlog_format=ROW时,可以更新一个包含的表和一个忽略的表的 DML 语句。