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