文章目录  
 【 1. 日志的基本原理 】 【 2. 错误日志 Error Log 】 2.1 启动和设置错误日志 2.2 查看错误日志 2.3 删除错误日志 【 3. 二进制日志 Binary Log 】 3.1 启动和设置二进制日志 3.2 查看二进制日志 3.3 删除二进制文件 删除所有二进制日志 删除小于指定编号的二进制日志 删除创建时间之前的二进制日志 3.4 暂时停止二进制日志 3.5 二进制日志的其他设置 3.6 使用二进制日志还原数据库 【 4. 通用查询日志 General Query Log 】 4.1 启动和设置通用查询日志 4.2 查看通用查询日志 4.3 停止通用查询日志 4.4 删除通用查询日志 【 5. 慢查询日志 Slow Query Log 】 5.1 启动和设置慢查询日志 5.2 查看慢查询日志 5.3 删除慢查询日志   
 
任何一种数据库,都会拥有各种各样的 日志 记录数据库的运行情况、日常操作和错误等信息 可以帮助我们了解 MySQL 数据库的运行情况、日常操作、错误信息和哪些地方需要进行优化 。例如,当用户 root 登录到 MySQL 服务器后,就会在日志文件里记录该用户的登录事件、执行操作等信息。当 MySQL 服务器运行时出错,出错信息就会被记录到日志文件里。  MySQL 也有不同类型的日志文件,各自存储了不同类型的日志。在 MySQL 所支持的日志文件里,除了二进制日志文件外,其它日志文件都是文本文件 默认情况下 MySQL 只会启动错误日志文件 其它日志则需要手动启动  日志类型 作用 二进制日志 该日志文件会以 二进制的形式记录数据库的各种操作  错误日志 该日志文件会记录 MySQL 服务器的启动、关闭和运行错误  通用查询日志 该日志记录 MySQL 服务器的启动和关闭信息、客户端的连接信息、更新、查询数据记录的 SQL 语句  慢查询日志 记录执行事件超过指定时间的操作 
 
日志的缺点 
  启动日志后,虽然可以对 MySQL 服务器性能进行维护,但是会 降低 MySQL 的执行速度 例如,一个查询操作比较频繁的 MySQL 中,记录通用查询日志和慢查询日志要花费很多的时间。  日志文件还会 占用大量的硬盘空间   错误日志(Error Log) MySQL 服务器启动和停止过程中的信息、服务器在运行过程中发生的故障和异常情况 错误日志中记录的并非全是错误信息 在 MySQL 数据库中,默认开启错误日志功能  在 MySQL 配置文件中(在Linux上通常是 my.cnf my.ini log-err 是否启用错误日志功能和错误日志的存储位置 log-warnings 定义是否将警告信息也记录到错误日志中。  将 log_error 选项加入到 MySQL 配置文件的 [mysqld] 组中,基本语法: 
  dir  参数指定错误日志的存储路径;filename  参数指定错误日志的文件名;省略参数时文件名默认为主机名即 hostname.err,存放在 Data 目录中。 重启 MySQL 服务后,参数开始生效  log- error= dir/ {filename}
应用背景在错误日志中找到发生异常的时间、原因,然后根据这些信息来解决异常 。 MySQL 中,SHOW 命令可以 查看错误日志文件所在的目录及文件名信息  SHOW  VARIABLES LIKE  'log_error' ; 
 
错误日志以文本文件的形式存储,直接通过记事本查看: 可以在 cmd 命令行 保证 MySQL 服务器上的硬盘空间 执行该命令后,MySQL 服务器首先会 自动创建一个新的错误日志 将旧的错误日志更名为 filename.err-old   mysqladmin - uroot - p flush- logs
 
二进制日志(Binary Log) 变更日志(Update Log) 记录数据库的变化情况 不包含数据记录查询操作 应用背景如果 MySQL 数据库意外停止,可以通过二进制日志文件来查看用户执行了哪些操作,对数据库服务器文件做了哪些修改,然后根据二进制日志文件中的记录来恢复数据库服务器。  默认情况下,二进制日志功能是关闭的。 SHOW  VARIABLES LIKE  'log_bin' ; 
 
在 MySQL 中,可以通过 在配置文件的[mysqld]组中添加 log-bin 选项来开启二进制日志 dir  参数指定二进制文件的存储路径;filename  参数指定二进制文件的文件名,其形式为 filename.number,number 的形式为 000001、000002 等。如果没有 dir 和 filename 参数,二进制日志将默认存储在数据库的data数据目录下  每次重启 MySQL 服务后,都会生成一个新的二进制日志文件,这些日志文件的文件名中 filename 部分不会改变,number 会不断递增。  log- bin= dir/ [ filename] 
SHOW  binary  logs; 
SHOW  master status ; 
查看二进制日志文件内容二进制日志使用二进制格式存储,不能直接打开查看 mysqlbinlog 命令只在当前文件夹下查找指定的二进制日志,因此需要在二进制日志所在的目录下运行该命令,否则将会找不到指定的二进制日志文件。  mysqlbinlog filename. number
实例mysqlbinlog "F:\ProgramData\MySQL\MySQL Server 8.4\Data\PROMETHUS-bin.000001" 除了 filename.number 文件,MySQL 还会生成一个名为 filename.index 存储着所有二进制日志文件的列表  二进制日志中记录着大量的信息,如果很长时间 不清理二进制日志,将会浪费很多的磁盘空间 。 登录 MySQL 数据库后,可以执行该语句来删除所有二进制日志。删除所有二进制日志后,MySQL 将会重新创建新的二进制日志,新二进制日志的编号从 000001 开始  RESET MASTER; 
每个二进制日志文件后面有一个 6 位数的编号,如 000001。使用 PURGE MASTER LOGS TO 语句,可以 删除指定二进制日志的编号之前的日志 该语句将删除编号小于 filename.number  的所有二进制日志。  PURGE  MASTER LOGS TO  'filename.number' ; 
使用 PURGE MASTER LOGS TO 语句,可以 删除指定时间之前创建的二进制日志 其中,“hh”为 24 制的小时。该语句将删除在指定时间之前创建的所有二进制日志。  PURGE  MASTER LOGS TO  'yyyy-mm-dd hh:MM:ss' ; 
问题背景 使用 SET 语句来暂停/开启二进制日志功能,基本语法: 
  0 表示暂停二进制日志功能,1 表示开启二进制功能。  SET  SQL_LOG_BIN= 0 / 1 ; 
my.ini 中的 [mysqld] 组下面有几个设置参数是关于二进制日志的,这里以expire_logs_day 和 max_binlog_size 为例讲述。 expire_logs_day  定义了 MySQL 清除过期日志的时间 expire_logs_days =  10 
max_binlog_size  定义了 单个文件的大小限制 max_binlog_size =  1 00 M
二进制日志中记录了用户对数据库更改的所有操作,如 INSERT 语句、UPDATE 语句、CREATE 语句等。如果数据库因为操作不当或其它原因丢失了数据,可以通过二进制日志来查看在一定时间段内用户的操作,结合数据库备份来还原数据库。 数据库恢复的流程先使用最近的备份文件来还原数据库 使用二进制日志来还原  还原数据库的基本语法: 
  先使用 mysqlbinlog 命令来读取 filename.number 中的内容,再使用 mysql 命令将这些内容还原到数据库中。 使用 mysqlbinlog 命令进行还原操作时,必须是编号(number)小的先还原。例如,mylog.000001 必须在 mylog.000002 之前还原。  mysqlbinlog filename. number |  mysql - u root - p
通用查询日志(General Query Log) 记录用户的所有操作 默认情况下,通用查询日志功能是关闭的 SHOW  VARIABLES LIKE  '%general%' ; 
 
在 MySQL 中,可以通过 在配置文件的[mysqld]组中添加 log 选项来开启通用查询日志 dir  参数指定通用查询日志的存储路径;filename  参数指定日志的文件名。如果不指定存储路径,通用查询日志将默认存储到 MySQL 数据库的数据文件夹下。如果不指定文件名,默认文件名为 hostname.log,其中 hostname 表示主机名。 log= dir/ filename
如果希望了解用户最近的操作,可以查看通用查询日志。通用查询日志以文本文件的形式存储,可以 直接使用记事本打开通用查询日志  将 MySQL 配置文件中的相关配置注释掉,然后重启服务器 
设置 MySQL 的环境变量 general_log 为关闭状态 SET  GLOBAL  general_log= off ; 
问题背景占用非常大的磁盘空间  在 MySQL 中,可以使用 mysqladmin 命令来开启新的通用查询日志 如果希望备份旧的通用查询日志,必须先将旧的日志文件拷贝出来或者改名。然后,再执行 mysqladmin 命令。  mysqladmin - uroot - p flush- logs
除了上述方法之外,还可以 手动删除通用查询日志,删除之后需要重新启动 MySQL 服务  慢查询日志(Slow Query Log) 记录在 MySQL 中执行时间超过指定时间的查询语句 通过慢查询日志,可以查找出哪些查询语句的执行效率低,以便进行优化。 默认情况下,慢查询日志功能是关闭的。 slow_query_log :慢查询开启状态slow_query_log_file :慢查询日志存放的位置(一般设置为 MySQL 的数据存放目录)long_query_time :查询超过多少秒才记录SHOW  VARIABLES LIKE  'slow_query%' ; 
 
可以通过 log-slow-queries 选项开启慢查询日志。通过 long_query_time 选项来 设置时间值,时间以秒为单位,如果查询时间超过了这个时间值,这个查询语句将被记录到慢查询日志 dir  参数指定慢查询日志的存储路径,如果不指定存储路径,慢查询日志将默认存储到 MySQL 数据库的数据文件夹下。filename  参数指定日志的文件名,生成日志文件的完整名称为 filename-slow.log。 如果不指定文件名,默认文件名为 hostname-slow.log,hostname 是 MySQL 服务器的主机名。n  参数是设定的时间值,该值的单位是秒。如果不设置 long_query_time 选项,默认时间为 10 秒。 log- slow- queries= dir\filename
long_query_time= n
SET  GLOBAL  slow_query_log= ON / OFF ; 
SET  GLOBAL  long_query_time= n; 
如果想查看哪些查询语句的执行效率低,可以从慢查询日志中获得信息。和错误日志、查询日志一样,慢查询日志也是以文本文件的形式存储的,可以 直接通过记事本打开查看  慢查询日志的删除方法与通用日志的删除方法是一样的,可以使用 mysqladmin 命令来删除。mysqladmin 命令的语法如下: 
  执行该命令后,命令行会提示输入密码;输入正确密码后,将执行删除操作。新的慢查询日志会直接覆盖旧的查询日志,不需要再手动删除。 通用查询日志和慢查询日志都是使用这个命令,使用时一定要注意,一旦执行这个命令,通用查询日志和慢查询日志都只存在新的日志文件中   mysqladmin - uroot - p flush- logs
数据库管理员也可以 手动删除慢查询日志,删除之后需要重新启动 MySQL 服务