【ACDU翻译】 MySQL 17.2.5.2 表级复制选项的评估
仅当以下两个条件之一为真时,副本才会检查并评估表选项:
- 未找到匹配的数据库选项。
- 找到一个或多个数据库选项,并根据上一节中描述的规则评估以达到“执行”条件(请参阅 第 17.2.5.1 节,“评估数据库级复制和二进制日志记录选项”)。
首先,作为初步条件,副本检查是否启用了基于语句的复制。如果是这样,并且该语句出现在存储函数中,则副本执行该语句并退出。如果启用基于行的复制,则副本不知道语句是否发生在源上的存储函数中,因此此条件不适用。
笔记
对于基于语句的复制,复制事件表示语句(构成给定事件的所有更改都与单个 SQL 语句相关联);对于基于行的复制,每个事件代表单个表行中的更改(因此单个语句如UPDATE mytable SET mycol = 1
可能产生许多基于行的事件)。从事件的角度来看,检查表选项的过程对于基于行的复制和基于语句的复制是相同的。
达到这一点后,如果没有表选项,副本将简单地执行所有事件。如果有任何 --replicate-do-table
或 --replicate-wild-do-table
选项,则要执行的事件必须匹配其中之一;否则,将被忽略。如果有任何 --replicate-ignore-table
或 --replicate-wild-ignore-table
选项,则执行所有事件,但与这些选项中的任何一个匹配的事件除外。
重要的
表级复制过滤器仅适用于查询中明确提及和操作的表。它们不适用于由查询隐式更新的表。例如,GRANT
更新mysql.user
系统表但未提及该表的语句不受指定mysql.%
为通配符模式的过滤器的影响。
以下步骤更详细地描述了此评估。起点是评估数据库级选项的结束,如 第 17.2.5.1 节,“评估数据库级复制和二进制日志记录选项”中所述。
- 是否有任何表复制选项?
- 是的。 继续第 2 步。
- 否。 执行更新并退出。
- 使用哪种日志记录格式?
- 陈述。 为执行更新的每个语句执行其余步骤。
- 排。 对表行的每次更新执行其余步骤。
- 有什么
--replicate-do-table
选择吗?- 是的。 该表是否与其中任何一个匹配?
- 是的。 执行更新并退出。
- 否 。继续执行步骤 4。
- 否 。继续执行步骤 4。
- 是的。 该表是否与其中任何一个匹配?
- 有什么
--replicate-ignore-table
选择吗?- 是的。 该表是否与其中任何一个匹配?
- 是的。 忽略更新并退出。
- 否 。继续执行第 5 步。
- 否 。继续执行第 5 步。
- 是的。 该表是否与其中任何一个匹配?
- 有什么
--replicate-wild-do-table
选择吗?- 是的。 该表是否与其中任何一个匹配?
- 是的。 执行更新并退出。
- 否 。继续执行步骤 6。
- 否 。继续执行步骤 6。
- 是的。 该表是否与其中任何一个匹配?
- 有什么
--replicate-wild-ignore-table
选择吗?- 是的。 该表是否与其中任何一个匹配?
- 是的。 忽略更新并退出。
- 否 。继续执行步骤 7。
- 否 。继续执行步骤 7。
- 是的。 该表是否与其中任何一个匹配?
- 还有要测试的表吗?
- 是的。 返回第 3 步。
- 否 。继续执行第 8 步。
- 有什么
--replicate-do-table
或--replicate-wild-do-table
选项吗?- 是的。 忽略更新并退出。
- 否。 执行更新并退出。
笔记
--replicate-do-table
如果单个 SQL 语句同时对or 选项 包含的 表和or --replicate-wild-do-table
忽略的另一个表进行 操作,则基于语句的复制将停止--replicate-ignore-table
--replicate-wild-ignore-table
选项。副本必须执行或忽略完整的语句(形成复制事件),并且它不能在逻辑上执行此操作。这也适用于 DDL 语句的基于行的复制,因为 DDL 语句始终作为语句记录,而不考虑有效的日志记录格式。唯一可以更新包含表和忽略表并且仍能成功复制的语句类型是已使用 .log 记录的 DML 语句 binlog_format=ROW
。
免责声明:
1、本站资源由自动抓取工具收集整理于网络。
2、本站不承担由于内容的合法性及真实性所引起的一切争议和法律责任。
3、电子书、小说等仅供网友预览使用,书籍版权归作者或出版社所有。
4、如作者、出版社认为资源涉及侵权,请联系本站,本站将在收到通知书后尽快删除您认为侵权的作品。
5、如果您喜欢本资源,请您支持作者,购买正版内容。
6、资源失效,请下方留言,欢迎分享资源链接
文章评论