以下讨论可作为对与Rewriter
查询重写插件关联的这些元素的参考:
数据库 中 的
Rewriter
规则表query_rewrite
Rewriter
程序和功能Rewriter
系统和状态变量
数据库中的rewrite_rules
表
为
插件用来决定是否重写语句
query_rewrite
的规则提供持久存储。Rewriter
用户通过修改存储在该表中的规则集与插件进行通信。该插件通过设置表的
message
列向用户传达信息。
规则表由
flush_rewrite_rules
存储过程加载到插件中。除非在最近的表修改之后调用了该过程,否则表内容不一定与插件使用的规则集相对应。
该rewrite_rules
表有以下列:
id
规则 ID。此列是表主键。您可以使用 ID 来唯一标识任何规则。
pattern
指示规则匹配的语句模式的模板。用于
?
表示匹配数据值的参数标记。pattern_database
用于匹配语句中非限定表名的数据库。如果相应的数据库和表名相同,则语句中的限定表名与模式中的限定名匹配。仅当默认数据库相同
pattern_database
且表名相同时,语句中的非限定表名才匹配模式中的非限定名。replacement
指示如何重写匹配
pattern
列值的语句的模板。用于?
表示匹配数据值的参数标记。在重写的语句中,插件使用与 中相应标记匹配的数据值 替换?
参数标记 。replacement
pattern
enabled
规则是否启用。仅当此列为 时,加载操作(通过调用
flush_rewrite_rules()
存储过程执行)才将规则从表加载到Rewriter
内存缓存中YES
。此列可以在不删除规则的情况下停用规则:将列设置为除以外的值
YES
并将表重新加载到插件中。message
该插件使用此列与用户进行通信。如果将规则表加载到内存中时没有发生错误,插件会将
message
列设置为NULL
. 非NULL
值表示错误,列内容是错误消息。在这些情况下可能会发生错误:模式或替换是产生语法错误的不正确 SQL 语句。
替换包含
?
比模式更多的参数标记。
如果发生加载错误,插件还会将
Rewriter_reload_error
状态变量设置为ON
。pattern_digest
此列用于调试和诊断。如果在将规则表加载到内存中时该列存在,插件将使用模式摘要更新它。如果您试图确定某些语句无法重写的原因,则此列可能很有用。
normalized_pattern
此列用于调试和诊断。如果在将规则表加载到内存中时该列存在,插件将使用模式的规范化形式更新它。如果您试图确定某些语句无法重写的原因,则此列可能很有用。
Rewriter
插件操作使用一个将规则表加载到其内存缓存中的存储过程,以及一个辅助加载函数。在正常操作下,用户只调用存储过程。该函数旨在由存储过程调用,而不是直接由用户调用。
flush_rewrite_rules()
此存储过程使用
load_rewrite_rules()
函数将rewrite_rules
表的内容加载到Rewriter
内存缓存中。加载表后,它还会清除查询缓存。呼唤
flush_rewrite_rules()
暗示COMMIT
。修改规则表后调用此过程,使插件从新表内容更新其缓存。如果发生任何错误,插件会
message
为表中适当的规则行设置列,并将Rewriter_reload_error
状态变量设置为ON
。此函数是
flush_rewrite_rules()
存储过程使用的辅助例程。
Rewriter
查询重写插件支持以下系统变量
。只有安装了插件,这些变量才可用(请参阅
第 5.5.4.1 节,“安装或卸载重写器查询重写插件”)。
-
系统变量 rewriter_enabled
范围 全球的 动态的 是的 类型 布尔值 默认值 ON
有效值 OFF
Rewriter
查询重写插件是否启用 。 -
系统变量 rewriter_verbose
范围 全球的 动态的 是的 类型 整数 供内部使用。
Rewriter
查询重写插件支持以下状态变量
。只有安装了插件,这些变量才可用(请参阅
第 5.5.4.1 节,“安装或卸载重写器查询重写插件”)。
重写插件重写规则的数量成功地从
rewrite_rules
表中加载到内存中供Rewriter
插件使用。rewrite_rules
表被加载到Rewriter
插件 使用的内存缓存中的 次数。Rewriter_number_rewritten_queries
Rewriter
查询重写插件加载 后重写的查询数 。最近一次将
rewrite_rules
表加载到Rewriter
插件使用的内存缓存中时是否发生错误。如果值为OFF
,则没有发生错误。如果值为ON
,则发生错误;检查表的message
列中rewriter_rules
是否有错误消息。