Documentation Home
MySQL 8.3 Reference Manual
Related Documentation Download this Manual
PDF (US Ltr) - 40.8Mb
PDF (A4) - 40.9Mb
Man Pages (TGZ) - 294.0Kb
Man Pages (Zip) - 409.0Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb
Excerpts from this Manual

MySQL 8.3 Reference Manual  /  ...  /  Rewriter Query Rewrite Plugin Reference

7.6.4.3 Rewriter 查询重写插件参考

以下讨论作为 Rewriter 查询重写插件相关元素的参考:

  • Rewriter 规则表在 query_rewrite 数据库中

  • Rewriter 过程和函数

  • Rewriter 系统和状态变量

7.6.4.3.1 Rewriter 查询重写插件规则表

Rewriter 插件使用 query_rewrite 数据库中的 rewrite_rules 表来存储规则,以决定是否重写语句。

用户通过修改表中的规则与插件通信。插件通过设置表的 message 列与用户通信。

Note

除非调用了 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.3.2 Rewriter 查询重写插件过程和函数

重写器 插件操作使用存储过程加载规则表到其内存缓存,并使用一个可加载的帮助函数。在正常操作中,用户只调用存储过程。该函数旨在由存储过程调用,而不是直接由用户调用。

7.6.4.3.3 重写器查询重写插件系统变量

重写器查询重写插件支持以下系统变量。这些变量仅在插件安装时可用(见 第 7.6.4.1 节,“安装或卸载重写器查询重写插件”)。

7.6.4.3.4 重写器查询重写插件状态变量

Rewriter 查询重写插件支持以下状态变量。这些变量仅在插件安装时可用(见 第 7.6.4.1 节,“安装或卸载 Rewriter 查询重写插件”)。

  • Rewriter_number_loaded_rules

    Rewriter 插件从 rewrite_rules 表中成功加载到内存中的重写规则数量,以供 Rewriter 插件使用。

  • Rewriter_number_reloads

    Rewriter 插件从 rewrite_rules 表中加载到内存缓存中的次数,用于 Rewriter 插件。

  • Rewriter_number_rewritten_queries

    自 Rewriter 查询重写插件加载以来,被 Rewriter 插件重写的查询数量。

  • Rewriter_reload_error

    最近一次加载 rewrite_rules 表到 Rewriter 插件的内存缓存时是否发生错误。如果值为 OFF,则未发生错误。如果值为 ON,则发生错误;请检查 rewriter_rules 表的 message 列以获取错误消息。