[ProxySQL - mysql_query_rules ] - 查询规则配置说明

39人浏览 / 0人评论

字段说明

  • rule_id:规则的id。规则是按照rule_id的顺序进行处理的, 在不清楚自己需要添加多少规则时, 这个值可以设置一个间隔, 比如第一条规则id1, 第二条10, 第三条20, 依次类推. 因为规则生效是有顺序的, 如果想要调整的话这样设置更方便
  • active:只有该字段值为1的规则才会加载到runtime数据结构,所以只有这些规则才会被查询处理模块处理。
  • username:用户名筛选,当设置为非NULL值时,只有匹配的用户建立的连接发出的查询才会被匹配。
  • schemaname:schema筛选,当设置为非NULL值时,只有当连接使用schemaname作为默认schema时,该连接发出的查询才会被匹配。(在MariaDB/MySQL中,schemaname等价于databasename)。
  • flagIN,flagOUT:这些字段允许我们创建"链式规则"(chains of rules),一个规则接一个规则。
  • apply:当匹配到该规则时,立即应用该规则。
  • client_addr:通过源地址进行匹配。
  • proxy_addr:当流入的查询是在本地某地址上时,将匹配。
  • proxy_port:当流入的查询是在本地某端口上时,将匹配。
  • digest:通过digest进行匹配,digest的值在stats_mysql_query_digest.digest中。
  • match_digest:通过正则表达式匹配digest。
  • match_pattern:通过正则表达式匹配查询语句的文本内容。
  • negate_match_pattern:设置为1时,表示未被match_digest或match_pattern匹配的才算被成功匹配。也就是说,相当于在这两个匹配动作前加了NOT操作符进行取反。
  • re_modifiers:RE正则引擎的修饰符列表,多个修饰符使用逗号分隔。指定了CASELESS后,将忽略大小写。指定了GLOBAL后,将替换全局(而不是第一个被匹配到的内容)。为了向后兼容,默认只启用了CASELESS修饰符。
  • replace_pattern:将匹配到的内容替换为此字段值。它使用的是RE2正则引擎的Replace。注意,这是可选的,当未设置该字段,查询处理器将不会重写语句,只会缓存、路由以及设置其它参数。
  • destination_hostgroup:将匹配到的查询路由到该主机组。但注意,如果用户的transaction_persistent=1(见mysql_users表),且该用户建立的连接开启了一个事务,则这个事务内的所有语句都将路由到同一主机组,无视匹配规则。
  • cache_ttl:查询结果缓存的时间长度(单位毫秒)。注意,在ProxySQL 1.1中,cache_ttl的单位是秒。
  • reconnect:目前不使用该功能。
  • timeout:被匹配或被重写的查询执行的最大超时时长(单位毫秒)。如果一个查询执行的时间太久(超过了这个值),该查询将自动被杀掉。如果未设置该值,将使用全局变量mysql-default_query_timeout的值。
  • retries:当在执行查询时探测到故障后,重新执行查询的最大次数。如果未指定,则使用全局变量mysql-query_retries_on_failure的值。
  • delay:延迟执行该查询的毫秒数。本质上是一个限流机制和QoS,使得可以将优先级让位于其它查询。这个值会写入到mysql-default_query_delay全局变量中,所以它会应用于所有的查询。将来的版本中将会提供一个更高级的限流机制。
  • mirror_flagOUT和mirror_hostgroup:mirroring相关的设置,目前mirroring正处于实验阶段,所以不解释。
  • error_msg:查询将被阻塞,然后向客户端返回error_msg指定的信息。
  • sticky_conn:当前还未实现该功能。
  • multiplex:如果设置为0,将禁用multiplexing。如果设置为1,则启用或重新启用multiplexing,除非有其它条件(如用户变量或事务)阻止启用。如果设置为2,则只对当前查询不禁用multiplexing。默认值为NULL,表示不会修改multiplexing的策略。
  • log:查询将记录日志。
  • apply:当设置为1后,当匹配到该规则后,将立即应用该规则,不会再评估其它的规则(注意:应用之后,将不会评估mysql_query_rules_fast_routing中的规则)。
  • comment:注释说明字段,例如描述规则的意义。

常用配置原则

  • 规则依照rule_id从小到大开始匹配, 一旦匹配将不再继续往下匹配(个人实践)
  • 支持规则链条: 比如第一条规则命中后, 继续执行第二条规则. 第一条规则设置mirror_flagOUT, 第二条规则设置flagIN. 两者完全相等.
    | rule_id | active | username | schemaname | flagIN | client_addr | proxy_addr | proxy_port | digest | match_digest    | match_pattern | negate_match_pattern | re_modifiers | flagOUT | replace_pattern | destination_hostgroup | cache_ttl | cache_empty_result | cache_timeout | reconnect | timeout | retries | delay | next_query_flagIN | mirror_flagOUT | mirror_hostgroup | error_msg                          | OK_msg                             | sticky_conn | multiplex | gtid_from_hostgroup | log | apply | comment |
    +---------+--------+----------+------------+--------+-------------+------------+------------+--------+-----------------+---------------+----------------------+--------------+---------+-----------------+-----------------------+-----------+--------------------+---------------+-----------+---------+---------+-------+-------------------+----------------+------------------+------------------------------------+------------------------------------+-------------+-----------+---------------------+-----+-------+---------+
    | 70      | 1      | NULL     | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | LOAD LABEL      | NULL          | 0                    | CASELESS     | NULL    | NULL            | 1                     | NULL      | NULL               | NULL          | NULL      | NULL    | NULL    | NULL  | NULL              | 101            | NULL             | NULL                               | NULL                               | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
    | 71      | 1      | NULL     | NULL       | 101    | NULL        | NULL       | NULL       | NULL   | LOAD LABEL      | NULL          | 0                    | CASELESS     | NULL    | NULL            | 2                     | NULL      | NULL               | NULL          | NULL      | NULL    | NULL    | 5000  | NULL              | NULL           | NULL             | NULL                               | NULL                               | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
    
  • 规则添加完成后, 执行保存命令方可生效
    load mysql query rules to runtime;
    save mysql query rules to disk;
    
  • 我用过的demo
    | rule_id | active | username | schemaname | flagIN | client_addr | proxy_addr | proxy_port | digest | match_digest    | match_pattern | negate_match_pattern | re_modifiers | flagOUT | replace_pattern | destination_hostgroup | cache_ttl | cache_empty_result | cache_timeout | reconnect | timeout | retries | delay | next_query_flagIN | mirror_flagOUT | mirror_hostgroup | error_msg                          | OK_msg                             | sticky_conn | multiplex | gtid_from_hostgroup | log | apply | comment |
    +---------+--------+----------+------------+--------+-------------+------------+------------+--------+-----------------+---------------+----------------------+--------------+---------+-----------------+-----------------------+-----------+--------------------+---------------+-----------+---------+---------+-------+-------------------+----------------+------------------+------------------------------------+------------------------------------+-------------+-----------+---------------------+-----+-------+---------+
    | 70      | 1      | NULL     | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | LOAD LABEL      | NULL          | 0                    | CASELESS     | NULL    | NULL            | 1                     | NULL      | NULL               | NULL          | NULL      | NULL    | NULL    | NULL  | NULL              | 101            | NULL             | NULL                               | NULL                               | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
    | 71      | 1      | NULL     | NULL       | 101    | NULL        | NULL       | NULL       | NULL   | LOAD LABEL      | NULL          | 0                    | CASELESS     | NULL    | NULL            | 2                     | NULL      | NULL               | NULL          | NULL      | NULL    | NULL    | 5000  | NULL              | NULL           | NULL             | NULL                               | NULL                               | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
    | 80      | 1      | NULL     | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | CREATE TABLE    | NULL          | 0                    | CASELESS     | NULL    | NULL            | 1                     | NULL      | NULL               | NULL          | NULL      | NULL    | 3       | NULL  | NULL              | NULL           | 2                | NULL                               | NULL                               | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
    | 90      | 1      | NULL     | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | DROP TABLE      | NULL          | 0                    | CASELESS     | NULL    | NULL            | 1                     | NULL      | NULL               | NULL          | NULL      | NULL    | 3       | NULL  | NULL              | NULL           | 2                | NULL                               | NULL                               | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
    | 100     | 1      | NULL     | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | ALTER TABLE     | NULL          | 0                    | CASELESS     | NULL    | NULL            | 1                     | NULL      | NULL               | NULL          | NULL      | NULL    | NULL    | NULL  | NULL              | 102            | NULL             | NULL                               | NULL                               | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
    | 101     | 1      | NULL     | NULL       | 102    | NULL        | NULL       | NULL       | NULL   | ALTER TABLE     | NULL          | 0                    | CASELESS     | NULL    | NULL            | 2                     | NULL      | NULL               | NULL          | NULL      | NULL    | NULL    | 5000  | NULL              | NULL           | NULL             | NULL                               | NULL                               | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
    | 110     | 1      | NULL     | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | ALTER DATABASE  | NULL          | 0                    | CASELESS     | NULL    | NULL            | 1                     | NULL      | NULL               | NULL          | NULL      | NULL    | 3       | NULL  | NULL              | NULL           | 2                | NULL                               | NULL                               | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
    | 120     | 1      | NULL     | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | CREATE DATABASE | NULL          | 0                    | CASELESS     | NULL    | NULL            | 1                     | NULL      | NULL               | NULL          | NULL      | NULL    | 3       | NULL  | NULL              | NULL           | 2                | NULL                               | NULL                               | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
    | 121     | 1      | NULL     | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | DROP DATABASE   | NULL          | 0                    | CASELESS     | NULL    | NULL            | 1                     | NULL      | NULL               | NULL          | NULL      | NULL    | 3       | NULL  | NULL              | NULL           | 2                | NULL                               | NULL                               | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
    | 130     | 1      | NULL     | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | CREATE ROLE     | NULL          | 0                    | CASELESS     | NULL    | NULL            | 1                     | NULL      | NULL               | NULL          | NULL      | NULL    | 3       | NULL  | NULL              | NULL           | 2                | NULL                               | NULL                               | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
    | 131     | 1      | NULL     | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | DROP ROLE       | NULL          | 0                    | CASELESS     | NULL    | NULL            | 1                     | NULL      | NULL               | NULL          | NULL      | NULL    | 3       | NULL  | NULL              | NULL           | 2                | NULL                               | NULL                               | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
    | 140     | 1      | NULL     | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | CREATE USER     | NULL          | 0                    | CASELESS     | NULL    | NULL            | 1                     | NULL      | NULL               | NULL          | NULL      | NULL    | 3       | NULL  | NULL              | NULL           | 2                | NULL                               | NULL                               | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
    | 141     | 1      | NULL     | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | DROP USER       | NULL          | 0                    | CASELESS     | NULL    | NULL            | 1                     | NULL      | NULL               | NULL          | NULL      | NULL    | 3       | NULL  | NULL              | NULL           | 2                | NULL                               | NULL                               | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
    | 150     | 1      | NULL     | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | GRANT           | NULL          | 0                    | CASELESS     | NULL    | NULL            | 1                     | NULL      | NULL               | NULL          | NULL      | NULL    | 3       | NULL  | NULL              | NULL           | 2                | NULL                               | NULL                               | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
    | 151     | 1      | NULL     | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | REVOKE          | NULL          | 0                    | CASELESS     | NULL    | NULL            | 1                     | NULL      | NULL               | NULL          | NULL      | NULL    | 3       | NULL  | NULL              | NULL           | 2                | NULL                               | NULL                               | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
    | 160     | 1      | NULL     | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | NULL            | insert        | 0                    | CASELESS     | NULL    | NULL            | 1                     | NULL      | NULL               | NULL          | NULL      | NULL    | NULL    | NULL  | NULL              | NULL           | 2                | doris禁止使用insert                 | doris禁止使用insert                  | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
    | 170     | 1      | NULL     | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | EXPORT TABLE    | NULL          | 0                    | CASELESS     | NULL    | NULL            | 1                     | NULL      | NULL               | NULL          | NULL      | NULL    | NULL    | NULL  | NULL              | NULL           | NULL             | NULL                               | NULL                               | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
    | 991     | 1      | NULL     | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | NULL            | kerberos      | 0                    | CASELESS     | NULL    | NULL            | 1                     | NULL      | NULL               | NULL          | NULL      | NULL    | NULL    | NULL  | NULL              | NULL           | 2                | doris禁止使用kerberos关键字          | doris禁止使用kerberos关键字           | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
    | 1000    | 1      | NULL     | NULL       | 0      | NULL        | NULL       | NULL       | NULL   | .               | NULL          | 0                    | CASELESS     | NULL    | NULL            | 1                     | NULL      | NULL               | NULL          | NULL      | NULL    | NULL    | NULL  | NULL              | NULL           | 2                | NULL                               | NULL                               | NULL        | NULL      | NULL                | NULL | 1     | NULL    |
    +---------+--------+----------+------------+--------+-------------+------------+------------+--------+-----------------+---------------+----------------------+--------------+---------+-----------------+-----------------------+-----------+--------------------+---------------+-----------+---------+---------+-------+-------------------+----------------+------------------+------------------------------------+------------------------------------+-------------+-----------+---------------------+-----+-------+---------+
    
    

全部评论