【问题标题】:SELECT queries in MySQL binary_logMySQL binary_log 中的 SELECT 查询
【发布时间】:2018-02-12 16:12:59
【问题描述】:

我正在尝试验证数据库历史记录。为此,我需要记录和解析对数据库的读写访问。

我知道 MySQL 主要提供两种类型的日志 - general query log 和 binary log。一般查询日志对我没有帮助,因为它不记录结束时间戳。而二进制日志非常适合我的工作,但它不记录读取访问,即SELECT查询。

所以我想知道是否有办法强制二进制日志记录,以便它也记录非修改查询。

【问题讨论】:

    标签: mysql verification binary-log general-log


    【解决方案1】:

    二进制日志只记录数据或元数据的变化。没有选项可以让它记录 SELECT 查询。

    您忽略了MySQL slow query log,它确实记录了查询的时间戳和持续时间。您可以通过设置 long_query_time=0 使慢查询日志包含所有查询,以便它记录所有耗时 0 秒或更长时间的查询(即所有查询)。

    小心!在典型系统中,SELECT 查询的数量远远多于其他查询的数量。您的日志可能会增长得非常快。确保配置日志轮换,否则你会填满你的磁盘。

    除此之外,听起来您需要审核日志。有关 MySQL Enterprise 审计日志插件,请参阅 https://dev.mysql.com/doc/refman/5.7/en/audit-log.html(这需要 Oracle 的支持订阅)。

    至少有几个 MySQL 审计日志插件的开源实现。例如:https://www.percona.com/doc/percona-server/LATEST/management/audit_log_plugin.html

    【讨论】:

    • 谢谢。这真的很有帮助。我更喜欢慢查询而不是服务器审计,因为服务器审计不记录持续时间或结束时间戳。另外,有没有办法记录读取的值或“返回的行”?
    • @rnbcoder 是的,慢查询日志应该包含“发送的行数”字段。自己看看是否包含您需要的信息。
    • 你能帮我理解慢查询字段吗?它有 start_time、query_time、lock_time。是查询执行的持续时间——[start_time + lock_time, start_time + lock_time + query_time]?
    • 查询在等待lock_time 秒后才开始执行以获取所需的锁。把这想象成在超市排队的时间。一旦它开始执行,就会持续query_time 秒。这就像您排到队伍的最前面后,店员需要多长时间才能处理您的杂货。所以从应用程序的角度来看,时间持续了lock_time+query_time,但查询执行只是后半部分。
    猜你喜欢
    • 2012-01-25
    • 2014-10-13
    • 1970-01-01
    • 1970-01-01
    • 2012-05-04
    • 2020-09-30
    • 1970-01-01
    • 2021-07-06
    • 2016-01-10
    相关资源
    最近更新 更多