7.6.4.3 重写器查询重写插件参考
以下讨论作为重写器查询重写插件相关元素的参考:
-
重写器规则表在query_rewrite数据库中
-
重写器过程和函数
-
重写器系统和状态变量
query_rewrite数据库中的rewrite_rules表提供了重写器插件使用的规则的持久存储。这些规则用于决定是否重写语句。
用户通过修改存储在该表中的规则集来与插件通信。插件通过将message列设置为非空值来与用户通信。
该表被flush_rewrite_rules存储过程加载到插件中。除非该存储过程在最近的表修改后被调用,否则表中的内容不一定与插件当前使用的规则集相对应。
rewrite_rules表具有以下列:
-
id
规则ID。该列是表的主键。您可以使用ID唯一标识任何规则。
-
pattern
表示语句匹配的模板。使用
?
表示参数标记符号,以匹配数据值。 -
pattern_database
用于匹配未qualified表名的数据库。qualified表名在语句中匹配qualified名称在模式中,如果对应的数据库和表名相同。未qualified表名在语句中匹配未qualified名称在模式中,只有当默认数据库与
pattern_database
相同且表名相同时。 -
replacement
表示如何重写语句的模板。使用
?
表示参数标记符号,以匹配数据值。在重写语句中,插件使用对应标记符号在模式中的数据值来替换?
参数标记符号。 -
enabled
是否启用规则。加载操作(由
flush_rewrite_rules()
存储过程执行)将规则从表中加载到重写器内存缓存中,只有当该列为YES
时。该列使得可以禁用规则而不删除它:将该列设置为除
YES
以外的值,然后重新加载表到插件中。 -
message
插件使用该列与用户通信。如果在加载规则表到内存时没有错误,插件将将
message
列设置为NULL
。非NULL
值表示错误,并且该列的内容是错误信息。错误可能出现在以下情况下:-
或者模式或替换语句都包含错误的SQL语句,导致语法错误。
-
替换语句中包含的参数标记数量超过模式中的参数标记数量。
如果发生加载错误,插件还将将
Rewriter_reload_error
状态变量设置为ON
。 -
-
pattern_digest
这个列用于调试和诊断。如果该列在规则表加载到内存时存在,插件将其更新为模式摘要。这列可能有助于确定某些语句无法被重写。
-
normalized_pattern
这个列用于调试和诊断。如果该列在规则表加载到内存时存在,插件将其更新为模式的normalized形式。这列可能有助于确定某些语句无法被重写。
Rewriter
插件操作使用一个存储过程来加载规则表到内存缓存中,并使用一个可加载函数。正常情况下,用户只调用存储过程。函数旨在由存储过程调用,而不是由用户直接调用。
-
这个存储过程使用
load_rewrite_rules()
函数将规则表中的内容加载到Rewriter
内存缓存中。调用
flush_rewrite_rules()
将隐式地调用COMMIT
。调用这个过程后,您可以将规则表的内容更新到插件的缓存中。如果发生错误,插件将在适当的规则行中设置
message
列,并将Rewriter_reload_error
状态变量设置为ON
。 -
这个函数是
flush_rewrite_rules()
存储过程使用的帮助函数。
Rewriter查询重写插件支持以下系统变量。这些变量仅在插件安装时可用(见Section 7.6.4.1, “Installing or Uninstalling the Rewriter Query Rewrite Plugin”)。
-
System Variable rewriter_enabled
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value ON
Valid Values OFF
是否启用了查询重写插件。
-
rewriter_enabled_for_threads_without_privilege_checks
System Variable rewriter_enabled_for_threads_without_privilege_checks
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 布尔 Default Value ON
Valid Values OFF
是否对执行权限检查的复制线程应用重写。如果设置为
OFF
,则不应用重写。需要SYSTEM_VARIABLES_ADMIN
或SUPER
权限来设置。如果
rewriter_enabled
设置为OFF
,则该变量无效。 -
System Variable rewriter_verbose
Scope 全局 Dynamic 是 SET_VAR
Hint Applies否 Type 整数 仅供内部使用。
查询重写插件支持以下状态变量。这些变量仅在插件安装时可用(见Section 7.6.4.1, “Installing or Uninstalling the Rewriter Query Rewrite Plugin”)。
-
查询重写插件加载的rewrite规则数量,从
rewrite_rules
表中加载到内存中,以供查询重写插件使用。 -
查询重写插件加载
rewrite_rules
表的次数,以内存缓存为查询重写插件使用。 -
Rewriter_number_rewritten_queries
自插件加载以来,
Rewriter
查询重写插件重写的查询数量。 -
是否在最近一次加载
rewrite_rules
表格到Rewriter
插件使用的内存缓存时发生错误。如果值为OFF
,则没有错误发生。如果值为ON
,则发生错误;请检查message
列中的错误信息。