以下讨论作为 Rewriter 查询重写插件相关元素的参考:
-
Rewriter 规则表在
query_rewrite数据库中 -
Rewriter过程和函数 -
Rewriter系统和状态变量
Rewriter 插件使用 query_rewrite 数据库中的 rewrite_rules 表来存储规则,以决定是否重写语句。
用户通过修改表中的规则与插件通信。插件通过设置表的 message 列与用户通信。
除非调用了 flush_rewrite_rules 存储过程,否则表的内容不一定对应插件正在使用的规则。
Rewriter 规则表具有以下列:
-
id规则 ID。这是表的主键。您可以使用 ID 唯一标识任何规则。
-
pattern指示语句匹配模式的模板。使用
?代表参数标记,以匹配数据值。 -
pattern_database用于匹配语句中未限定表名的数据库。语句中的限定表名与模式中的限定名称匹配,如果对应的数据库和表名相同。语句中的未限定表名仅在默认数据库与
pattern_database相同且表名相同时匹配。 -
replacement指示如何重写匹配
pattern列值的语句的模板。使用?代表参数标记,以匹配数据值。在重写语句中,插件使用数据值替换replacement中的?参数标记。 -
enabled规则是否启用。只有当该列为
YES时,加载操作(通过调用flush_rewrite_rules()存储过程)将规则从表中加载到 Rewriter 插件的内存缓存中。该列使得可以在不删除规则的情况下停用规则:将该列设置为非
YES值,然后重新加载表到插件中。 -
message插件使用该列与用户通信。如果规则表加载到内存中时没有错误,插件将该列设置为
NULL。非NULL值表示错误,列内容是错误消息。错误可能在以下情况下发生:-
模式或替换是语法错误的 SQL 语句。
-
替换包含比模式更多的
?参数标记。
如果加载错误发生,插件还将
Rewriter_reload_error状态变量设置为ON。 -
-
pattern_digest该列用于调试和诊断。如果该列存在时加载规则表到内存中,插件将其更新为模式摘要。这可能有助于确定为什么某些语句未被重写。
-
normalized_pattern该列用于调试和诊断。如果该列存在时加载规则表到内存中,插件将其更新为模式的标准形式。这可能有助于确定为什么某些语句未被重写。
重写器 插件操作使用存储过程加载规则表到其内存缓存,并使用一个可加载的帮助函数。在正常操作中,用户只调用存储过程。该函数旨在由存储过程调用,而不是直接由用户调用。
重写器查询重写插件支持以下系统变量。这些变量仅在插件安装时可用(见 第 7.6.4.1 节,“安装或卸载重写器查询重写插件”)。
-
System Variable 重写器启用Scope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value ONValid Values OFF是否启用重写器查询重写插件。
-
重写器启用_for_threads_without_privilege_checksSystem Variable 重写器启用_for_threads_without_privilege_checksScope 全局 Dynamic 是 SET_VARHint Applies否 Type 布尔值 Default Value ONValid Values OFF是否应用重写规则到没有特权检查的复制线程中。如果设置为
OFF,则跳过这些重写规则。需要SYSTEM_VARIABLES_ADMIN特权或SUPER特权来设置。如果
重写器启用为OFF,则该变量无效。 -
内部使用。
Rewriter 查询重写插件支持以下状态变量。这些变量仅在插件安装时可用(见 第 7.6.4.1 节,“安装或卸载 Rewriter 查询重写插件”)。
-
Rewriter 插件从
rewrite_rules表中成功加载到内存中的重写规则数量,以供 Rewriter 插件使用。 -
Rewriter 插件从
rewrite_rules表中加载到内存缓存中的次数,用于 Rewriter 插件。 -
Rewriter_number_rewritten_queries自 Rewriter 查询重写插件加载以来,被 Rewriter 插件重写的查询数量。
-
最近一次加载
rewrite_rules表到 Rewriter 插件的内存缓存时是否发生错误。如果值为OFF,则未发生错误。如果值为ON,则发生错误;请检查rewriter_rules表的message列以获取错误消息。