jieye の 数字花园

Search

Search IconIcon to open search

17 其他数据库日志

Last updated Nov 28, 2022

我们在讲解数据库事务时,讲过两种日志:重做日志、回滚日志。
对于线上数据库应用系统,突然遭遇数据库宕机,怎么办?在这种情况下,定位宕机的原因 就非常关键。我们可以查看数据库的错误日志。因为日志中记录了数据库运行中的诊断信息,包括了错误、警告和注释等信息。比如:从日志中发现某个连接中的 SQL操作发生了死循环,导致内存不足,被系统强行终止了。明确了原因,处理起来也就轻松了,系统很快就恢复了运行。
除了发现错误,日志在数据复制、数据恢复、操作审计,以及确保数据的永久性和一致性等方面,都有着不可替代的作用。

MysQL8.0官网日志地址:“https://dev.mysql.com/doc/refman/8.0/en/server-logs.html”

# 1 MySQL支持的日志

# 1.1 日志类型

MySQL有不同类型的日志文件,用来存储不同类型的日志,分为 二进制日志 、 错误日志 、 通用查询日志和 慢查询日志 ,这也是常用的4种。MySQL 8又新增两种支持的日志: 中继日志 和 数据定义语句日志 。使用这些日志文件,可以查看MySQL内部发生的事情。

这6类日志分别为:

  1. 慢查询日志:记录所有执行时间超过long_query_time的所有查询,方便我们对查询进行优化。
  2. 通用查询日志:记录所有连接的起始时间和终止时间,以及连接发送给数据库服务器的所有指令,对我们复原操作的实际场景、发现问题,甚至是对数据库操作的审计都有很大的帮助。
  3. 错误日志:记录MySQL服务的启动、运行或停止MySQL服务时出现的问题,方便我们了解服务器的状态,从而对服务器进行维护。
  4. 二进制日志:记录所有更改数据的语句,可以用于主从服务器之间的数据同步,以及服务器遇到故障时数据的无损失恢复。
  5. 中继日志:用于主从服务器架构中,从服务器用来存放主服务器二进制日志内容的一个中间文件。从服务器通过读取中继日志的内容,来同步主服务器上的操作。
  6. 数据定义语句日志:记录数据定义语句执行的元数据操作。

除二进制日志外,其他日志都是 文本文件 。默认情况下,所有日志创建于 MySQL数据目录 中。

# 1.2 日志的弊端

日志功能会降低MySQL数据库的性能。
日志会占用大量的磁盘空间。

# 2 慢查询日志(slow query log)

前面章节 9 性能分析工具的使用已经详细讲述。

# 3 通用查询日志(general query log)

通用查询日志用来 记录用户的所有操作 ,包括启动和关闭MySQL服务、所有用户的连接开始时间和截止时间、发给 MySQL 数据库服务器的所有 SQL 指令等。当我们的数据发生异常时,查看通用查询日志,还原操作时的具体场景,可以帮助我们准确定位问题

# 3.1 问题场景

# 3.2 查看当前状态

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
Version:0.9 StartHTML:0000000105 EndHTML:0000003470 StartFragment:0000000141 EndFragment:0000003430

mysql> SHOW VARIABLES LIKE '%general%';

+------------------+------------------------------+

| Variable_name | Value |

+------------------+------------------------------+

| general_log | OFF | #通用查询日志处于关闭状态

| general_log_file | /var/lib/mysql/atguigu01.log | #通用查询日志文件的名称是atguigu01.log

+------------------+------------------------------+

2 rows in set (0.03 sec)

# 3.3 启动日志

方式1:永久性方式
修改my.cnf或者my.ini配置文件来设置。在[mysqld]组下加入log选项,并重启MySQL服务。格式如下:
[mysqld] general_log=ON general_log_file=[path[filename]] #日志文件所在目录路径,filename为日志文件名
如果不指定目录和文件名,通用查询日志将默认存储在MySQL数据目录中的hostname.log文件中,hostname表示主机名。
方式2:临时性方式

# 3.5 停止日志

# 3.6 删除刷新日志

如果数据的使用非常频繁,那么通用查询日志会占用服务器非常大的磁盘空间。数据管理员可以删除很长时间之前的查询日志,以保证MySQL服务器上的硬盘空间。
手动删除文件

# 4 错误日志(error log

错误日志记录了 MysQL 服务器启动、停止运行的时间,以及系统启动、运行和停止过程中的诊断信息,包括错误、警告和提示等。
通过错误日志可以查看系统的运行状态,便于即时发现故障、修复故障。如果MySQL服务 出现异常,错误日志是发现问题、解决故障的 首选。

# 4.1 启动日志

在MySQL数据库中,错误日志功能是默认开启的。而且,错误日志无法被禁止。
默认情况下,错误日志存储在MySQL数据库的数据文件夹下,名称默认为 mysqld.log (Linux系统)或hostname.err(mac系统)。如果需要制定文件名,则需要在my.cnf或者my.ini中做如下配置:
[mysqld] log-error=[path/[filename]] #path为日志文件所在的目录路径,filename为日志文件名

# 4.2 查看日志

# 4.3 删除刷新日志

4.4 8.0新特性

# 5 二进制日志(bin log)

binlog可以说是MySQL中比较 重要 的日志了,在日常开发及运维过程中,经常会遇到。
binlog即binary log,二进制日志文件,也叫作变更日志(update log)。它记录了数据库所有执行的
DDL 和 DML 等数据库更新事件的语句,但是不包含没有修改任何数据的语句(如数据查询语句select、 show等)。

可以说MySQL数据库的数据备份、主备、主主、主从都离不开binlog,需要依靠binlog来同步数据,保证数据一致性。

# 5.1 查看默认情况

查看记录二进制日志是否开启:在MySQL8中默认情况下,二进制文件是开启的

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
Version:0.9 StartHTML:0000000105 EndHTML:0000003977 StartFragment:0000000141 EndFragment:0000003937

mysql> show variables like '%log_bin%';

+---------------------------------+----------------------------------+

| Variable_name | Value |

+---------------------------------+----------------------------------+

| log_bin | ON |

| log_bin_basename | /var/lib/mysql/binlog |

| log_bin_index | /var/lib/mysql/binlog.index |

| log_bin_trust_function_creators | OFF |

| log_bin_use_v1_row_events | OFF |

| sql_log_bin | ON |

+---------------------------------+----------------------------------+

6 rows in set (0.00 sec)

# 5.2 日志参数设置


# 5.3 查看日志