天天看点

ProxySQL官档翻译__08_ProxySQL配置之查询日志08_ProxySQL配置之查询日志

08_ProxySQL配置之查询日志

备注:文章编写时间201904-201905期间,后续官方在github的更新没有被写入

~

一、查询日志[Query Logging]

ProxySQL能够记录通过它的查询语句(所有语句,这里统称为查询语句-queries)。日志的配置是跟随查询规则一起配置的,这将允许日志记录变得宽泛或

是详细。

二、建立日志[Setup]

1、首先,全局启用日志记录功能。

Admin> SELECT * FROM global_variables WHERE variable_name = 'mysql-eventslog_filename';
+--------------------------+----------------+
| variable_name            | variable_value |
+--------------------------+----------------+
| mysql-eventslog_filename |                |
+--------------------------+----------------+
1 row in set (0.00 sec)

Admin> SET mysql-eventslog_filename='queries.log';
Query OK, 1 row affected (0.00 sec)

Admin> SELECT * FROM global_variables WHERE variable_name = 'mysql-eventslog_filename';
+--------------------------+----------------+
| variable_name            | variable_value |
+--------------------------+----------------+
| mysql-eventslog_filename | queries.log    |
+--------------------------+----------------+
1 row in set (0.00 sec)           

备注:改日志文件queries.log将在datadir目录下生成。

2、将配置加载到RUNTIME层并持久化到DISK层

Admin> LOAD MYSQL VARIABLES TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)

Admin> SAVE MYSQL VARIABLES TO DISK;
Query OK, 110 rows affected (0.00 sec)           

3、接下来,按需求创建查询规则以匹配日志记录。

如果需要记录所有查询,可以使用一个如下简单的规则:

Admin> SELECT * FROM mysql_query_rules ;
Empty set (0.00 sec)

Admin> INSERT INTO mysql_query_rules (rule_id, active, match_digest, log,apply) VALUES (1,1,'.',1,0);
Query OK, 1 row affected (0.00 sec)

Admin> SELECT * FROM mysql_query_rules \G;
*************************** 1. row ***************************
              rule_id: 1
               active: 1
             username: NULL
           schemaname: NULL
               flagIN: 0
          client_addr: NULL
           proxy_addr: NULL
           proxy_port: NULL
               digest: NULL
         match_digest: .
        match_pattern: NULL
 negate_match_pattern: 0
         re_modifiers: CASELESS
              flagOUT: NULL
      replace_pattern: NULL
destination_hostgroup: NULL
            cache_ttl: NULL
   cache_empty_result: NULL
        cache_timeout: NULL
            reconnect: NULL
              timeout: NULL
              retries: NULL
                delay: NULL
    next_query_flagIN: NULL
       mirror_flagOUT: NULL
     mirror_hostgroup: NULL
            error_msg: NULL
               OK_msg: NULL
          sticky_conn: NULL
            multiplex: NULL
  gtid_from_hostgroup: NULL
                  log: 1
                apply: 0
              comment: NULL
1 row in set (0.00 sec)           

4、使规则保持活跃和持久

Admin> LOAD MYSQL QUERY RULES TO RUNTIME;
Query OK, 0 rows affected (0.00 sec)

Admin> SAVE MYSQL QUERY RULES TO DISK;
Query OK, 0 rows affected (0.06 sec)           

三、读取记录的查询日志[Reading Logged Queries]

查询信息是以二进制格式记录的。在源码安装包中包含一个eventslog_reader_sample应用程序,可以读取二进制文件并输出纯文本(RPM包中没有)。

例如:

$ ./tools/eventslog_reader_sample /var/lib/proxysql/file1.log.00001258
ProxySQL LOG QUERY: thread_id="2" username="root" schemaname=information_schema" client="127.0.0.1:58307" HID=0 server="127.0.0.1:3306" starttime="2016-10-23 12:34:37.132509" endtime="2016-10-23 12:34:38.347527" duration=1215018us digest="0xC5C3C490CA0825C1"
select sleep(1)
ProxySQL LOG QUERY: thread_id="2" username="root" schemaname=information_schema" client="127.0.0.1:58307" HID=0 server="127.0.0.1:3306" starttime="2016-10-23 12:41:38.604244" endtime="2016-10-23 12:41:38.813587" duration=209343us digest="0xE9D6D71A620B328F"
SELECT DATABASE()
ProxySQL LOG QUERY: thread_id="2" username="root" schemaname=test" client="127.0.0.1:58307" HID=0 server="127.0.0.1:3306" starttime="2016-10-23 12:42:38.511849" endtime="2016-10-23 12:42:38.712609" duration=200760us digest="0x524DB8D7A9B4C132"
select aaaaaaa           

工具程序构建过程示例:

1)下载源码包

2)切换到工具目录

3)执行 make

四、相关问题和功能请求[Related Issues and Feature Requests]

以下是有关此功能的一些相关讨论。

1)Issue #561 -- 记录所有查询。

https://github.com/sysown/proxysql/issues/561