community.proxysql.proxysql_query_rules 模块 – 使用 proxysql 管理界面修改查询规则

注意

此模块是 community.proxysql 集合 (版本 1.6.0) 的一部分。

如果您正在使用 ansible 包,则可能已安装此集合。它不包含在 ansible-core 中。要检查它是否已安装,请运行 ansible-galaxy collection list

要安装它,请使用: ansible-galaxy collection install community.proxysql。您需要其他要求才能使用此模块,有关详细信息,请参阅 要求

要在 playbook 中使用它,请指定: community.proxysql.proxysql_query_rules

概要

要求

执行此模块的主机需要以下要求。

  • PyMySQL

  • mysqlclient

参数

参数

注释

active

布尔值

将 *active* 设置为 False 的规则将被跟踪在数据库中,但永远不会加载到内存数据结构中。

选项

  • false

  • true

apply

布尔值

与 *flagIN* 和 *flagOUT* 结合使用以创建规则链。将 apply 设置为 True 表示要应用的最后一个规则。

选项

  • false

  • true

cache_empty_result

布尔值

在 community.proxysql 1.1.0 中添加

控制是否缓存没有行的结果集。

选项

  • false

  • true

cache_ttl

整数

缓存查询结果的毫秒数。请注意,在 ProxySQL 1.1 中,*cache_ttl* 以秒为单位。

client_addr

字符串

匹配来自特定来源的流量。

comment

字符串

自由格式文本字段,可用于查询规则的描述性注释。

config_file

路径

指定从中读取 *login_user* 和 *login_password* 的配置文件。

默认值: ""

delay

整数

延迟查询执行的毫秒数。这实际上是一种限流机制和 QoS,并提供了一种优先处理查询的方法。此值将添加到适用于所有查询的 mysql-default_query_delay 全局变量。

destination_hostgroup

整数

将匹配的查询路由到此主机组。除非存在已启动的事务并且登录用户的 *transaction_persistent* 设置为 True(参见 community.proxysql.proxysql_mysql_users),否则将发生这种情况。

digest

字符串

匹配具有特定摘要的查询,如 stats_mysql_query_digest.digest 返回的那样。

error_msg

字符串

查询将被阻止,并且指定的 error_msg 将返回给客户端。

flagIN

整数

与 *flagOUT* 和 *apply* 结合使用以创建规则链。

flagOUT

整数

与 *flagIN* 和 apply 结合使用以创建规则链。设置时,*flagOUT* 表示在下一个规则链中使用的 *flagIN*。

force_delete

布尔值

默认情况下,我们避免在单个批次中删除多个计划,但是如果您需要此行为并且您不关心已删除的计划,则可以将 *force_delete* 设置为 True

选项

  • false ← (默认)

  • true

load_to_runtime

布尔值

动态地将配置加载到运行时内存。

选项

  • false

  • true ← (默认)

log

布尔值

查询将被记录。

选项

  • false

  • true

login_host

字符串

用于连接到 ProxySQL 管理界面的主机。

默认值: "127.0.0.1"

login_password

字符串

用于对 ProxySQL 管理界面进行身份验证的密码。

login_port

整数

用于连接到 ProxySQL 管理界面的端口。

默认值: 6032

login_unix_socket

字符串

用于连接到 ProxySQL 管理界面的套接字。

login_user

字符串

用于对 ProxySQL 管理界面进行身份验证的用户名。

match_digest

字符串

与查询摘要匹配的正则表达式。使用的正则表达式方言是 re2 - https://github.com/google/re2

match_pattern

字符串

与查询文本匹配的正则表达式。使用的正则表达式方言是 re2 - https://github.com/google/re2

mirror_flagOUT

整数

启用查询镜像。如果设置了mirror_flagOUT,则可以用来针对指定的规则链评估镜像查询。

mirror_hostgroup

整数

启用查询镜像。如果设置了mirror_hostgroup,则可以将查询镜像到相同或不同的主机组。

multiplex

整数

在 community.proxysql 1.1.0 中添加

如果为0,则多路复用将被禁用。

如果为1,则尝试启用多路复用。可能存在其他条件阻止此操作(例如,用户变量或事务)。

如果为2,则不会仅针对当前查询禁用多路复用。

默认情况下,不会更改多路复用策略。

选项

  • 0

  • 1

  • 2

negate_match_pattern

布尔值

如果negate_match_pattern设置为True,则只有与查询文本不匹配的查询才会被视为匹配。这相当于在与match_pattern匹配的正则表达式前面添加了一个NOT运算符。

选项

  • false

  • true

next_query_flagIN

整数

在community.proxysql 1.3.0中添加

设置后,其值将成为下一个查询的flagIN值。

OK_msg

字符串

在 community.proxysql 1.1.0 中添加

对于使用已定义规则的查询,将返回指定的消息。

proxy_addr

字符串

匹配特定本地IP上的传入流量。

proxy_port

整数

匹配特定本地端口上的传入流量。

re_modifiers

字符串

在community.proxysql 1.3.0中添加

用于修改RE引擎行为的选项的逗号分隔列表。使用CASELESS时,匹配不区分大小写。使用GLOBAL时,替换是全局的(替换所有匹配项,而不仅仅是第一个匹配项)。为了向后兼容,默认情况下仅启用CASELESS

replace_pattern

字符串

这是用来替换匹配模式的模式。请注意,这是可选的,当省略时,查询处理器将只缓存、路由或设置其他参数,而不会重写。

retries

整数

在查询执行过程中检测到故障时,需要重新执行查询的最多次数。如果未指定retries,则应用全局变量mysql-query_retries_on_failure。

rule_id

整数

规则的唯一ID。规则按rule_id顺序处理。

save_to_disk

布尔值

将配置保存到磁盘上的sqlite数据库中以持久化配置。

选项

  • false

  • true ← (默认)

schemaname

字符串

匹配schemaname的过滤条件。如果schemaname非空,则只有当连接使用schemaname作为其默认模式时,查询才会匹配。

state

字符串

present时 - 添加规则,当absent时 - 删除规则。

选项

  • "present" ← (默认)

  • "absent"

timeout

整数

匹配或重写的查询应执行的最大超时时间(毫秒)。如果查询运行时间超过特定阈值,则查询将自动终止。如果未指定timeout,则应用全局变量mysql-default_query_timeout。

username

字符串

匹配username的过滤条件。如果username非空,则只有当连接使用正确的用户名时,查询才会匹配。

备注

注意

  • 支持check_mode

示例

---
# This example adds a rule to redirect queries from a specific user to another
# hostgroup, it saves the mysql query rule config to disk, but avoids loading
# the mysql query config config to runtime (this might be because several
# rules are being added and the user wants to push the config to runtime in a
# single batch using the community.general.proxysql_manage_config module). It
# uses supplied credentials to connect to the proxysql admin interface.

- name: Add a rule
  community.proxysql.proxysql_query_rules:
    login_user: admin
    login_password: admin
    username: 'guest_ro'
    match_pattern: "^SELECT.*"
    destination_hostgroup: 1
    active: 1
    retries: 3
    state: present
    load_to_runtime: false

# This example demonstrates the situation, if your application tries to set a
# variable that will disable multiplexing, and you think it can be filtered out,
# you can create a filter that returns OK without executing the request.

- name: Add a filter rule
  community.proxysql.proxysql_query_rules:
    login_user: admin
    login_password: admin
    match_digest: '^SET @@wait_timeout = ?'
    active: 1
    OK_msg: 'The wait_timeout variable is ignored'

# This example adds a caching rule for a query that matches the digest.
# The query digest can be obtained from the `stats_mysql_query_digest`
# table. `cache_ttl` is specified in milliseconds. Empty responses are
# not cached.

- name: Add a cache rule
  community.proxysql.proxysql_query_rules:
    login_user: admin
    login_password: admin
    rule_id: 1
    digest: 0xECA450EA500A9A55
    cache_ttl: 30000
    cache_empty_result: false
    destination_hostgroup: 1
    active: true
    state: present
    save_to_disk: true
    load_to_runtime: true

# This example demonstrates how to prevent disabling multiplexing for
# situations where a request contains @.

- name: Add a rule with multiplex
  community.proxysql.proxysql_query_rules:
    login_user: admin
    login_password: admin
    rule_id: 1
    active: 1
    match_digest: '^SELECT @@max_allowed_packet'
    multiplex: 2

# This example demonstrates how to use next_query_flagIN argument. It allows
# ProxySQL query rules to be chained. The examples shows how you can have SELECTS
# immediately follow INSERT/UPDATE/DELETE statements to query the primary hostgroup
# and avoid replication lag

- name: Add insert query rule
  proxysql_query_rules:
    match_digest: "^INSERT"
    destination_hostgroup: 1,
    next_query_flagIN: 1

- name: Add update query rule
  proxysql_query_rules:
    match_digest: "^UPDATE"
    destination_hostgroup: 1,
    next_query_flagIN: 1

- name: Add delete query rules
  proxysql_query_rules:
    match_digest: "^DELETE"
    destination_hostgroup: 1,
    next_query_flagIN: 1

- name: Add insert query rules
  proxysql_query_rules:
    match_digest: ".*"
    destination_hostgroup: 1,
    next_query_flagIN: 1
    comment: Match every queries after an INSERT/UPDATE/DELETE query

# This example removes all rules that use the username 'guest_ro', saves the
# mysql query rule config to disk, and dynamically loads the mysql query rule
# config to runtime.  It uses credentials in a supplied config file to connect
# to the proxysql admin interface.

- name: Remove rules
  community.proxysql.proxysql_query_rules:
    config_file: '~/proxysql.cnf'
    username: 'guest_ro'
    state: absent
    force_delete: true

返回值

常见的返回值已在此处记录,以下是此模块特有的字段

描述

stdout

字典

从proxysql修改或删除的mysql用户。

返回:在创建/更新时将返回新修改的规则,在所有其他情况下将返回与提供的条件匹配的规则列表。

示例: {"changed": true, "msg": "已添加 规则 mysql_query_rules", "rules": [{"OK_msg": null, "active": "0", "apply": "0", "cache_empty_result": null, "cache_ttl": null, "client_addr": null, "comment": null, "delay": null, "destination_hostgroup": 1, "digest": null, "error_msg": null, "flagIN": "0", "flagOUT": null, "log": null, "match_digest": null, "match_pattern": null, "mirror_flagOUT": null, "mirror_hostgroup": null, "multiplex": null, "negate_match_pattern": "0", "proxy_addr": null, "proxy_port": null, "reconnect": null, "replace_pattern": null, "retries": null, "rule_id": "1", "schemaname": null, "timeout": null, "username": "guest_ro"}], "state": "present"}

作者

  • Ben Mildren (@bmildren)