更新时间:2024-07-31 GMT+08:00
分享

中间件-MySQL日志

自建中间件功能在邀测中,支持华北-北京四局点,仅针对用户内测使用,后续将全网开放,敬请期待!

MySQL是一种广泛使用的关系型数据库管理系统。MySQL日志系统包含了多种不同类型的日志,用于记录MySQL服务器在运行时的各种活动和事件。这些日志对于数据库管理、性能调优、故障排查等方面都非常重要。以下是MySQL中常见的几种日志及其说明:

  1. 错误日志(Error Log):
    • 记录MySQL服务器启动、运行或停止时出现的问题,以及服务器运行时的错误或警告信息。
    • 对于诊断和解决问题非常有用。
    • 在MySQL安装目录下的data文件夹中,文件名通常为hostname.err,其中hostname是MySQL服务器的主机名。
  2. 查询日志(General Query Log):
    • 记录MySQL服务器接收到的所有客户端连接和执行的SQL语句。
    • 可以用于分析查询的性能和执行情况。
    • 需要手动启动,默认情况下不启用。
  3. 慢查询日志(Slow Query Log):
    • 记录执行时间超过指定阈值(long_query_time)的查询语句。
    • 可以用于找出执行时间较长的查询语句,以便进行性能优化。
    • 同样需要手动启动。
  4. 二进制日志(Binary Log):
    • 记录了所有的修改数据库数据的操作(如UPDATE、INSERT、DELETE等)。
    • 主要用于数据备份、恢复和复制。
    • 可以通过配置参数log-bin来启用。
  5. 中继日志(Relay Log):
    • 在MySQL复制架构中,中继日志用于从主服务器的二进制日志文件中复制事件,并在从服务器上执行这些事件。
    • 主要用于MySQL的主从复制。
  6. 事务日志(Transaction Log):
    • 主要针对支持事务的存储引擎(如InnoDB)而言,记录了事务的开始、提交、回滚等操作。
    • 用于保证数据库的一致性和持久性。
  7. Undo日志(Undo Log):
    • 主要与InnoDB存储引擎相关,记录了正在进行的事务对数据库的修改操作。
    • 用于回滚事务或实现多版本并发控制(MVCC)。

采集方法

使用ICAgent采集日志,接入前请参考安装ICAgent(区域内主机)完成ICAgent安装。然后再通过采集ECS-文本日志方式将日志上报至LTS服务,详细操作请参考云主机ECS文本日志接入LTS

Mysql日志示例以及字段含义

介绍错误日志、查询日志、慢查询日志的示例和字段说明。

  • 错误日志(Error Log)
    2023-03-29T14:30:15.123456Z 0 [ERROR] InnoDB: Unable to lock ./ibdata1, error: 11
    表1 错误日志字段说明

    字段

    说明

    2023-03-29T14:30:15.123456Z

    日志条目的时间戳,采用ISO 8601格式,包含时区信息(Z表示UTC时间)。

    0

    线程ID,对于错误日志,这通常是0,表示这是一个全局消息,而不是与特定客户端连接相关。

    [ERROR]

    日志级别,这里表示这是一个错误消息。

    InnoDB: Unable to lock ./ibdata1, error: 11

    具体的错误消息,指示InnoDB存储引擎无法锁定ibdata1文件,并给出了错误代码11(通常表示“资源暂时不可用”)。

  • 查询日志(General Query Log)
    190109 14:23:00     3 Connect   root@localhost on testdb  
                   3 Query     SELECT * FROM users WHERE id = 1
    表2 查询日志字段说明

    字段

    说明

    190109 14:23:00

    日志条目的时间戳,采用YYMMDD HH:MM:SS格式。

    3

    线程ID,表示这个操作是由线程ID为3的客户端连接执行的。

    Connect

    操作类型,这里表示一个客户端连接。

    root@localhost

    连接的用户名和主机名。

    on testdb

    连接使用的数据库名。

    Query

    操作类型,这里表示执行了一个SQL查询。

    SELECT * FROM users WHERE id = 1

    执行的SQL语句。

  • 慢查询日志(Slow Query Log)
    190109 14:23:00     3 Connect   root@localhost on testdb  
                   3 Query     SELECT * FROM users WHERE id = 1
    表3 慢查询字段说明

    字段

    说明

    示例

    Time

    日志条目的时间戳。

    2023-03-29T15:00:01.234567Z

    User@Host

    执行查询的用户和主机信息。

    root[root] @ localhost [127.0.0.1]

    Id

    线程ID。

    3

    Query_time

    查询执行的时间长度(秒)。

    5.000234

    Lock_time

    查询等待表锁的时间长度(秒)。

    0.000123

    Rows_sent

    查询返回的行数。

    1000

    Rows_examined

    查询检查的行数(即扫描的行数,可能包括未返回的行)。

    100000

    SET timestamp=

    设置当前会话的时间戳(这通常是为了复制日志的一致性)。

    1617012001

    SELECT ...

    执行的SQL查询。

    SELECT * FROM big_table WHERE some_column = 'value'

日志位置

  1. 错误日志(Error Log):常见的位置是/var/log/mysql/error.log。可以通过查看MySQL的配置文件(通常是/etc/my.cnf、/etc/mysql/my.cnf或~/.my.cnf)中的log-error参数来确定错误日志的确切位置。
  2. 查询日志(General Query Log):如果已启用,其位置由general_log_file参数在配置文件中指定,默认为/var/log/mysql/general.log。
  3. 慢查询日志(Slow Query Log):如果已启用,其位置由slow_query_log_file参数在配置文件中指定,默认为/var/log/mysql/mysql-slow.log。
  4. 二进制日志(Binary Log):如果已启用,其位置由log-bin参数在配置文件中指定,位于/var/lib/mysql/。

相关文档