Разбор файла mysql.log - PullRequest
       21

Разбор файла mysql.log

0 голосов
/ 08 февраля 2019

Я хочу проанализировать файл mysql.log.Вот содержание моего файла.Я хочу напечатать метку времени, идентификатор потока, команду, аргумент.И если какой-либо контент отсутствует в строке, выведите это конкретное значение.Как и в 1-й строке, «700» - это thread_id, а «Quit» - это команда, но нет времени и аргумента.Так что выведите только thread_id и команду.

/usr/sbin/mysqld, Version: 5.5.61-0ubuntu0.14.04.1-log ((Ubuntu)). started with:
Tcp port: 3306  Unix socket: /var/run/mysqld/mysqld.sock
Time                 Id Command    Argument
      700 Quit  
190207 11:11:24   701 Connect   root@localhost on db_services
      701 Query SET SESSION sql_mode =
                REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
                @@sql_mode,
                "STRICT_ALL_TABLES,", ""),
                ",STRICT_ALL_TABLES", ""),
                "STRICT_ALL_TABLES", ""),
                "STRICT_TRANS_TABLES,", ""),
                ",STRICT_TRANS_TABLES", ""),
                "STRICT_TRANS_TABLES", "")
      701 Query SET NAMES utf8
190207 11:11:26   701 Quit  
190207 11:11:27   702 Connect   root@localhost on db_services
      702 Query SET SESSION sql_mode =
                REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
                @@sql_mode,
                "STRICT_ALL_TABLES,", ""),
                ",STRICT_ALL_TABLES", ""),
                "STRICT_ALL_TABLES", ""),
                "STRICT_TRANS_TABLES,", ""),
                ",STRICT_TRANS_TABLES", ""),
                "STRICT_TRANS_TABLES", "")
      702 Query SET NAMES utf8
      702 Quit  
190207 11:11:29   703 Connect   root@localhost on db_services
      703 Query SET SESSION sql_mode =
                REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
                @@sql_mode,
                "STRICT_ALL_TABLES,", ""),
                ",STRICT_ALL_TABLES", ""),
                "STRICT_ALL_TABLES", ""),
                "STRICT_TRANS_TABLES,", ""),
                ",STRICT_TRANS_TABLES", ""),
                "STRICT_TRANS_TABLES", "")
      703 Query SET NAMES utf8
      703 Quit  
      704 Connect   root@localhost on db_services
      704 Query SET SESSION sql_mode =
                REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
                @@sql_mode,
                "STRICT_ALL_TABLES,", ""),
                ",STRICT_ALL_TABLES", ""),
                "STRICT_ALL_TABLES", ""),
                "STRICT_TRANS_TABLES,", ""),
                ",STRICT_TRANS_TABLES", ""),
                "STRICT_TRANS_TABLES", "")
      704 Query SET NAMES utf8
190207 11:11:30   704 Query SELECT `clientID`
FROM `authentication`
      704 Query SELECT `privatekey`
FROM `authentication`
WHERE `clientID` = '1'

И вывод будет как

timestamp: '', thread_id:'700', command:'Quit', argument:''
timestamp: '190207 11:11:24', thread_id:'701', command:'Connect', argument:'root@localhost on db_services'
timestamp: '', thread_id:'701', command:'Query', argument:'SET SESSION sql_mode =
                REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(REPLACE(
                @@sql_mode,
                "STRICT_ALL_TABLES,", ""),
                ",STRICT_ALL_TABLES", ""),
                "STRICT_ALL_TABLES", ""),
                "STRICT_TRANS_TABLES,", ""),
                ",STRICT_TRANS_TABLES", ""),
                "STRICT_TRANS_TABLES", "")'

and so on.

1 Ответ

0 голосов
/ 08 февраля 2019

Вы можете хранить информацию журнала непосредственно в таблице следующим образом:

SET GLOBAL log_output = 'FILE,TABLE';
SET GLOBAL general_log = 'ON';

или

SET GLOBAL log_output = 'TABLE';
SET GLOBAL general_log = 'ON';

, затем MySQL (в данном случае MariaDB) в таблице mysql.general_log и вы можете прочитать нужную информацию напрямую через «SELECT».см .: https://mariadb.com/kb/en/library/writing-logs-into-tables/

Образец

MariaDB [(none)]> SET GLOBAL log_output = 'TABLE';
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> SET GLOBAL general_log = 'ON';
Query OK, 0 rows affected (0.000 sec)

MariaDB [(none)]> SELECT * from mysql.general_log limit 10;
+----------------------------+------------------------------------+-----------+-----------+--------------+-----------------------------------------------------------------+
| event_time                 | user_host                          | thread_id | server_id | command_type | argument                                                        |
+----------------------------+------------------------------------+-----------+-----------+--------------+-----------------------------------------------------------------+
| 2019-02-08 08:48:39.476877 | root[root] @ localhost [127.0.0.1] |         8 |         1 | Query        | SELECT seq FROM seq_1_to_100                                    |
| 2019-02-08 08:48:43.076693 | root[root] @ localhost [127.0.0.1] |         8 |         1 | Query        | SHOW TABLE STATUS LIKE 'general_log'                            |
| 2019-02-08 08:48:43.077482 | root[root] @ localhost [127.0.0.1] |         8 |         1 | Query        | SHOW CREATE TABLE `general_log`                                 |
| 2019-02-08 08:48:43.088938 | root[root] @ localhost [127.0.0.1] |         8 |         1 | Query        | SELECT * FROM `general_log` LIMIT 0,1000                        |
| 2019-02-08 08:53:33.262970 | [root] @ localhost []              |        10 |         1 | Connect      | root@localhost as anonymous on                                  |
| 2019-02-08 08:53:33.266018 | [root] @ localhost []              |        10 |         1 | Connect      | Access denied for user 'root'@'localhost' (using password: YES) |
| 2019-02-08 08:53:35.666988 | [root] @ localhost []              |        11 |         1 | Connect      | root@localhost as anonymous on                                  |
| 2019-02-08 08:53:35.674512 | root[root] @ localhost []          |        11 |         1 | Query        | select @@version_comment limit 1                                |
| 2019-02-08 08:53:57.407500 | root[root] @ localhost []          |        11 |         1 | Query        | SET GLOBAL log_output = 'TABLE'                                 |
| 2019-02-08 08:54:06.251004 | root[root] @ localhost []          |        11 |         1 | Query        | SET GLOBAL general_log = 'ON'                                   |
+----------------------------+------------------------------------+-----------+-----------+--------------+-----------------------------------------------------------------+
10 rows in set (0.000 sec)

MariaDB [(none)]>
...