MySQL-日志

概述

MySQL 日志是 MySQL 的重要组成部分。有以下数种:

  • 错误日志
  • 二进制日志
  • 通用查询日志
  • 慢查询日志

    错误日志

    Error Log,该日志文件会记录MySQL服务器的启动,关闭和运行错误等信息。

启动和设置

在 MySQL 数据库中,默认开启错误日志。

在 MySQL 配置文件中,错误日志所记录的信息可以通过 log-error 和 log-warnings 来定义。其中 log-error 定义是否启用和存储位置,log-warnings 定义是否将警告信息也包含入内。

删除

可以使用 mysqladmin 来开启新的错误日志

1
mysqladmin -uroot -p flush-logs

执行该日志后,MySQL 服务器首先会自动创建一个新的错误日志,然后将旧的错误日志更名为 filename.err-old。

二进制日志

Binary Log,也通常叫做更新日志(Update Log)。主要记录数据库的变化情况,即SQL的DDL和DML语句,不包含数据记录查询操作。

如果 MySQL 意外停止,可以通过二进制日志文件来查看用户执行了哪些操作等,然后根据文件中的记录来恢复数据库服务器。

默认情况下,二进制日志功能是关闭的。

启动和设置

在 MySQL 中,可以通过在配置文件中添加 log-bin 选项来开启二进制日志。

1
2
3
log-bin=dir/[filename]
//dir为二进制日志文件的存储路径
//filename为二进制日志文件的文件名,形式为filename.number,number会随着服务的启动不断递增

每次重启 MySQL 服务后,都会生成一个新的二进制日志文件,这些文件的 filename 都不会变,number 会依次递增。

除了 filename.number 文件以外,MySQL 还会生成一个 filename.index 文件这个文件存储着所有二进制日志文件的列表。

删除

1
2
3
4
5
6
删除所有二进制日志文件
RESET MASTER;
根据编号删除,可以删除指定编号之前创建的文件
PURGE MASTER LOGS TO 'filename.number';
根据创建时间删除,可以删除指定时间之前创建的文件
PURGE MASTER LOGS TO 'yyyy-mm-dd hh:MM:ss';

使用二进制日志文件恢复数据库

1
mysqlbinlog filename.number | mysql -u root -p

还原时需要注意,必须是编号(number)小的先还原。

通用查询日志

General Query Log,日志记录用户的所有操作,包括启动和关闭 MySQL 服务,更新语句和查询语句等。

启动和设置

默认情况下,通用查询日志是关闭的。

可以在 MySQL 配置文件添加 log 选项来开启通用查询日志。

停止

  1. 注释选项,重启服务器
  2. 设置环境变量 general_log。
    1
    SET GLOBAL general_log=off

    删除

    1
    mysqladmin -u root -p flush-logs

由于通用查询日志会记录用户的所有操作,如果数据库的使用非常频繁,通用查询日志将会占用非常大的磁盘空间,对系统性能影响较大。

慢查询日志

Slow Query Log,慢查询日志用来记录在 MySQL 中执行时间超过指定时间的查询语句。通过慢查询日志,可以查找出哪些查询语句的执行效率低,以便进行优化。

启动和设置

默认情况下,慢查询日志功能是关闭的。

可以通过配置文件设置 log-slow-queries 选项开启慢查询日志。long_query_time 选项来设置时间值,时间以秒为单位。如果查询时间超过了这个时间值,这个查询语句将被记录到慢查询日志。

还可以通过以下命令启动慢查询日志、设置指定时间:

1
2
SET GLOBAL slow_query_log=ON/OFF;
SET GLOBAL long_query_time=n;

删除

1
mysqladmin -uroot -p flush-logs

需要注意,通用查询日志和慢查询日志的删除都是这个语句,使用时一旦执行此命令,就会将旧的日志文件覆盖,如果需要备份旧的日志文件,就必须拷贝或改名,然后再执行。