中间件-MySQL日志
MySQL是一种广泛使用的关系型数据库管理系统。MySQL日志系统包含了多种不同类型的日志,用于记录MySQL服务器在运行时的各种活动和事件。这些日志对于数据库管理、性能调优、故障排查等方面都非常重要。以下是MySQL中常见的几种日志及其说明:
- 错误日志(Error Log):
- 记录MySQL服务器启动、运行或停止时出现的问题,以及服务器运行时的错误或警告信息。
- 对于诊断和解决问题非常有用。
- 在MySQL安装目录下的data文件夹中,文件名通常为hostname.err,其中hostname是MySQL服务器的主机名。
- 查询日志(General Query Log):
- 记录MySQL服务器接收到的所有客户端连接和执行的SQL语句。
- 可以用于分析查询的性能和执行情况。
- 需要手动启动,默认情况下不启用。
- 慢查询日志(Slow Query Log):
- 记录执行时间超过指定阈值(long_query_time)的查询语句。
- 可以用于找出执行时间较长的查询语句,以便进行性能优化。
- 同样需要手动启动。
- 二进制日志(Binary Log):
- 记录了所有的修改数据库数据的操作(如UPDATE、INSERT、DELETE等)。
- 主要用于数据备份、恢复和复制。
- 可以通过配置参数log-bin来启用。
- 中继日志(Relay Log):
- 在MySQL复制架构中,中继日志用于从主服务器的二进制日志文件中复制事件,并在从服务器上执行这些事件。
- 主要用于MySQL的主从复制。
- 事务日志(Transaction Log):
- 主要针对支持事务的存储引擎(如InnoDB)而言,记录了事务的开始、提交、回滚等操作。
- 用于保证数据库的一致性和持久性。
- 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'
日志位置
- 错误日志(Error Log):常见的位置是/var/log/mysql/error.log。可以通过查看MySQL的配置文件(通常是/etc/my.cnf、/etc/mysql/my.cnf或~/.my.cnf)中的log-error参数来确定错误日志的确切位置。
- 查询日志(General Query Log):如果已启用,其位置由general_log_file参数在配置文件中指定,默认为/var/log/mysql/general.log。
- 慢查询日志(Slow Query Log):如果已启用,其位置由slow_query_log_file参数在配置文件中指定,默认为/var/log/mysql/mysql-slow.log。
- 二进制日志(Binary Log):如果已启用,其位置由log-bin参数在配置文件中指定,位于/var/lib/mysql/。