记录MySQL查询并转发到Syslog / Event日志

时间:2018-10-25 16:51:14

标签: mysql logging mysql-slow-query-log binary-log

我能够启用错误日志,常规查询日志,慢速查询日志和二进制日志,并且能够将日志转发到Syslog。关于日志记录,我有几个问题。

1)错误日志将自动转发到Windows中的事件日志。如何将其他日志也转发到事件日志?

2)是否可以将多行mysql日志转换为单行。

3)是否可以在日志文件的开头添加一些标头,或者在每行日志的开头添加一些标签,以便于识别哪个日志文件。

4)在慢速查询日志中,注释了一些信息。使用rsyslog转发时,这些注释行会在所有Unix系统中转发吗?

# User@Host: debian-sys-maint[debian-sys-maint] @ localhost []
# Query_time: 0.000297  Lock_time: 0.000220 Rows_sent: 0  Rows_examined: 0
SET timestamp=1539924163;
select count(*) into @discard from `information_schema`.`EVENTS`;

5)mysqlbinlog可用于将二进制日志转换为人类可读的格式。有没有一种方法可以转换二进制文件并将其转发到syslog,而无需编写任何自定义脚本? mysql或rsyslog中有办法吗?

1 个答案:

答案 0 :(得分:0)

  

1)错误日志将自动转发到Windows中的事件日志。   如何将其他日志也转发到事件日志?

MySQL中没有执行此操作的功能。

  

2)是否可以将多行mysql日志转换为单行。

如果不修改MySQL源代码,就无法更改慢速查询日志的格式。是hard-coded

  ...
  if (my_b_printf(&log_file,
                  "# Query_time: %s  Lock_time: %s"
                  " Rows_sent: %lu  Rows_examined: %lu\n",
                  query_time_buff, lock_time_buff,
                  (ulong)thd->get_sent_row_count(),
                  (ulong)thd->get_examined_row_count()) == (uint)-1)
    goto err;
  ...

此外,对于记录的每个查询的其他行。

但是您可以从PERFORMANCE_SCHEMA获取相关的查询性能信息,甚至可以按查询类型获取摘要。有优缺点。例如,请参见以下博客:https://www.percona.com/blog/2014/02/11/performance_schema-vs-slow-query-log/

  

3)是否可以在日志文件中添加一些标头或在   每条日志行的开头,以便轻松识别   日志文件。

并非没有更改源代码。

  

4)在慢速查询日志中,注释了一些信息。什么时候   使用rsyslog转发,将这些注释行转发到   所有的Unix系统?

您不能将慢查询日志转发到syslog。

  

5)mysqlbinlog可用于将二进制日志转换为人类可读   格式。有没有一种方法可以转换二进制文件并转发   它到系统日志,而无需编写任何自定义脚本?有办法吗   mysql还是rsyslog?

否。

但是您可以使用mysqlbinlog工具来下载远程二进制日志,作为备份它们的一种方式。参见https://dev.mysql.com/doc/refman/8.0/en/mysqlbinlog-backup.html