17 其他数据库日志
我们在讲解数据库事务时,讲过两种日志:重做日志、回滚日志。
对于线上数据库应用系统,突然遭遇数据库宕机,怎么办?在这种情况下,定位宕机的原因 就非常关键。我们可以查看数据库的错误日志。因为日志中记录了数据库运行中的诊断信息,包括了错误、警告和注释等信息。比如:从日志中发现某个连接中的 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类日志分别为:
- 慢查询日志:记录所有执行时间超过long_query_time的所有查询,方便我们对查询进行优化。
- 通用查询日志:记录所有连接的起始时间和终止时间,以及连接发送给数据库服务器的所有指令,对我们复原操作的实际场景、发现问题,甚至是对数据库操作的审计都有很大的帮助。
- 错误日志:记录MySQL服务的启动、运行或停止MySQL服务时出现的问题,方便我们了解服务器的状态,从而对服务器进行维护。
- 二进制日志:记录所有更改数据的语句,可以用于主从服务器之间的数据同步,以及服务器遇到故障时数据的无损失恢复。
- 中继日志:用于主从服务器架构中,从服务器用来存放主服务器二进制日志内容的一个中间文件。从服务器通过读取中继日志的内容,来同步主服务器上的操作。
- 数据定义语句日志:记录数据定义语句执行的元数据操作。
除二进制日志外,其他日志都是 文本文件 。默认情况下,所有日志创建于 MySQL数据目录 中。
# 1.2 日志的弊端
日志功能会降低MySQL数据库的性能。
日志会占用大量的磁盘空间。
# 2 慢查询日志(slow query log)
前面章节 9 性能分析工具的使用已经详细讲述。
# 3 通用查询日志(general query log)
通用查询日志用来 记录用户的所有操作 ,包括启动和关闭MySQL服务、所有用户的连接开始时间和截止时间、发给 MySQL 数据库服务器的所有 SQL 指令等。当我们的数据发生异常时,查看通用查询日志,还原操作时的具体场景,可以帮助我们准确定位问题
# 3.1 问题场景
# 3.2 查看当前状态
|
|
# 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中默认情况下,二进制文件是开启的
|
|