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