小艾的自留地

Stay foolish, Stay hungry

日志无论在哪里都是尤为重要的存在,所以这篇笔记的目的就是了解Mysql 日志的。

日志简介

Mysql 的日志主要分为四类,使用这些日志文件,可以查看Mysql 内部发生的事情,这四类日志分别是:

  • 错误日志:记录Mysql 服务的启动、运行或停止Mysql服务时出现的问题。
  • 查询日志:记录建立的客户端连接和执行的语句。
  • 二进制日志:记录所有更改数据的语句,可以用于数据恢复。
  • 慢查询日志:记录所有执行时间超过 long_query_time 的所有查询或不使用索引的查询。

二进制日志

二进制日志主要记录 Mysql 数据库的变化。二进制日志以一种有效的格式,并且是事务安全的方式包含更新日志中可用的所有信息。

启动和设置二进制日志

默认情况下,二进制日志是关闭的,可以通过修改mysql 的配置文件来启动和设置二进制日志。

配置文件 my.ini 中有几个设置是关于二进制日志的:

1
2
3
4
5
6
7
# 如果需要启用,就在 mysqld 组下,加上 log-bin 选项
[mysqld]
log-bin

log-bin [=path/ [filename] ]
expire_logs_days = 10
max_binlog_size = 100M
  1. log-bin定义开启二进制日志,path 表示日志文件所在的目录路径,filename 指定了日志文件的名称。
  2. expire_logs_days定义了Mysql 清除过期日志的时间,即二进制日至的自动删除的天数。
  3. max_binlog_size定义了单个文件的大小限制,不能将变量设置为大于1GB或者小于4096B。默认值为1GB.

如何检查自己的二进制日志是否开启了呢?

输入以下命令:

1
mysql> show variables like 'log_%';

查看二进制日志

查看二进制文件个数及文件名,前提是开启了二进制日志:

1
mysql> show binary logs;

删除二进制日志

Mysql 也为我们提供了删除二进制日志的方法,有两种,作用不相同。

删除所有二进制日志文件:

1
mysql> RESET MASTER;

删除指定二进制日志文件:

1
2
# 其中,binlog.000003 是指二进制文件的名称
mysql> PURGE MASTER LOGS TO "binlog.000003";

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

如果启用了Mysql 的二进制日志,在数据库出现意外丢失数据时,可以使用 Mysqlbinlog 工具从指定时间点开始(例如,最后一次备份)直到现在。

Mysqlbinlog 恢复数据库的语法如下:

1
mysql> mysqlbinlog [option] filename | mysql -uuser -ppass

实例:使用Mysqlbinlog 恢复Mysql 数据库到2019年1月30日15:27:48时的状态,执行如下命令:

1
mysqlbinlog --stop--date="2019-01-30 15:27:48" | path/binlogfilename -uuser -ppass

暂停二进制日志功能

因为修改Mysql 配置文件可以启用、停用二进制日志功能,但是需要重启Mysql 服务器。Mysql 为我们提供了一种更简单的方式可以暂停记录二进制日志。

暂停记录二进制日志:

1
mysql> SET sql_log_bin = 0;

恢复记录二进制日志:

1
mysql> SET sql_log_bin = 1;

错误日志

错误日志文件包含了当Mysqld 启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。错误日志默认是开启的。

启动和设置错误日志

通过修改my.ini 配置文件,来启用或者停用错误日志

1
2
3
4
5
# 如果需要启用,就在 mysqld 组下,加上 log-error 选项
[mysqld]
log-error

log-error=[path/filename]

查看错误日志

首先使用如下命令查看错误日志的存储路径以及文件名:

1
mysql> show variables like 'log_error';

删除错误日志文件

Mysql 的错误日志文件是以文本文件的形式存储在文件系统中,可以直接删除。

1
mysql> flush logs;

通用查询日志

通用查询日志记录了Mysql 的所有操作,包括启动和关闭服务、执行查询和更新语句等。

启用和设置通用查询日志

同样的,打开Mysql 的my.ini 配置文件。

1
2
3
4
[mysqld]
log

log=[path\filename]

这里有两种方式,log 选项后面如果没有带任何参数表示使用Mysql 默认的存储位置,上面的也一样。

查看通用查询日志

可以通过log 设置的日志文件存储路径,去查看具体文件。

慢查询日志

慢查询日志记录查询时长超过指定时间的日志。通过慢查询日志,可以找出执行时间较长、执行效率较低的语句,然后进行优化。

启用和设置慢查询日志

同样的,打开编辑Mysql 的my.ini 配置文件:

1
2
3
4
5
[mysqld]
log-slow-queries

log-slow-queries=[path\filename]
long_query_time=n

n 表示查询时间的极限值,如果超过了这个值,这个查询过程就会被记录到慢查询日志文件中。

查询慢查询日志同上。

上面这些日志配置的更改都需要重启服务器才能生效,另外还有一种方式可以查看运行时日志。

启用实时日志

1
2
3
4
set global general_log = on;

// 查看日志文件目录
show variables like 'general_log_file';

这种方式的好处就是不需要重启Mysql 服务。

如果需要禁用:

1
set global general_log = off;

关于平时应该打开哪些日志的问题。

日志的开启既会影响Mysql 的性能,又会占用大量的磁盘空间。
因此如果不必要,应尽可能的少开启日志,根据不同的使用环境,考虑开启不同的日志。

例如:在开发环境中优化查询低效率的语句,可以开启慢查询日志;
如果需要记录用的所有查询操作,可以开启通用查询日志;
如果需要记录数据的变更,可以开启二进制日志;
错误日志默认开启;

评论