以下讨论作为 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_VAR
Hint Applies否 Type 布尔值 Default Value ON
Valid Values OFF
是否启用重写器查询重写插件。
-
重写器启用_for_threads_without_privilege_checks
System Variable 重写器启用_for_threads_without_privilege_checks
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔值 Default Value ON
Valid 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
列以获取错误消息。