
# 中间件-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（区域内主机）](https://support.huaweicloud.com/usermanual-lts/lts_02_0013.html)完成ICAgent安装。然后再通过采集ECS-文本日志方式将日志上报至LTS服务，详细操作请参考[云主机ECS文本日志接入LTS](https://support.huaweicloud.com/usermanual-lts/lts_04_1031.html)。
#### 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/。
 
