首页 MySQL日志
文章
取消

MySQL日志

MySQL日志1

1 错误日志

1.1. 介绍

错误日志是mysql中最主要的日志之一,它记录了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。

当数据库出现任何故障导致无法使用时。建议首先查看此日志。

1.2. 配置

该日志是默认开启的,默认存放目录/var/log/,默认的日志文件名为 mysqld.log

## 查看日志是否开启
show variables like '%log_error%';
# log_error stderr 输出到控制台,查看mysql配置文件的配置

2 二进制日志

2.1. 介绍

二进制日志(binlog)记录了所有的DDL(数据定义)语句和DML(数据操纵)语句,但不包括数据查询(select、show)语句

2.2. 作用

  1. 灾难时的数据恢复;

  2. MySQL的主从复制;

2.3. 配置

show variables like '%log_bin%';
# log_bin_basename /var/lib/mysql/binlog 地址及前缀 binlog.000001 ……
# log_bin_index /var/lib/mysql/binlog.index binlog索引文件

2.4. 日志格式

MySQL服务器中提供了多种格式来记录二进制日志,具体格式如下

日志格式含义
STATEMENT基于SQL语句的日志记录,记录的是SQL语句,对数据进行修改的SQL都会记录在日志文件中。
ROW基于行的日志记录,记录的是每一行的数据变更。(默认)
MIXED混合了STATMENT和ROW两种格式,默认采用STATEMENT,在某些特殊情况下自动切换为ROW进行记录。
show variables like '%binlog_format%';

2.5. 日志查看

由于日志是以二进制的方式存储的,不能直接读取,需要通过二进制日志查询工具mysqlbinlog来查看

1
2
3
4
5
6
7
8
mysqlbinlog [options] logfilename
options:
	-d		#指定数据库名称,只列出指定的数据库相关操作。
	-o		#忽略掉日志中前n行命令。
	-v		#将事件(数据变更)重构为SQL语句
	-vv		#将事件(数据变更)重构为SQL语句,并输出注释信息
e.g.:
mysqlbinlog -v binlog.000007 

2.6. 日志删除

对于比较繁忙的业务系统,每天生成的binlog数据巨大,如果长时间不清除,将会占用大量磁盘空间。可以通过以下几种方式清理日志:

指令含义
reset master删除全部binlog日志,删除之后,日志编号将从binlog.000001重新开始
purge master logs to ‘binlog.000XXX’删除 ****** 编号之前的所有日志
purge master logs before ‘yyyy-mm-dd hh24:mi:ss’删除日志为 yyyy-mm-dd hh24:mi:ss之前产生的所有日志

配置

可以在mysql的配置文件中配置二进制日志的过期时间,设置了之后,二进制日志会自动删除

show variables like '%binlog_expire_logs_seconds%';
# 2592000 默认30天

3 查询日志

3.1. 介绍

查询日志中记录了客户端的所有操作语句,而二进制日志不包含查询数据的SQL语句。默认情况下,查询日志是 未开启 的。

3.2. 配置

  1. 查看查询日志配置

    show variables like '%general%';
    
  2. 开启 查询日志

    1
    2
    3
    4
    
    ## 该选项用来开启查询日志,0:关闭 1:开启
    general_log=1
    ## 设置日志的文件名,如果没有指定,默认的文件名为 host_name.log
    general_lof_file=/var/lib/mysql/mysql_query.log
    

4 慢查询日志

慢查询日志记录了所有执行时间超过参数 long_query_time 设置值并且扫描记录数不小于min_examined_row_limit 的所有SQL语句的日志,默认开启

long_query_time 默认10秒,最小为 0,精度可到微秒。

日志位置:/var/lib/mysql/localhost-slow.log

1
2
3
4
## 慢查询日志开关
slow_query_log=1
## 慢查询时间参数
long_query_time=2

默认情况下,不会记录管理语句,也不会记录不使用索引进行查找的查询。

可以使用 log_slow_admin_statments 和 log_queries_not_using_indexes 更改此行为

1
2
3
4
## 记录执行较慢的管理语句
log_slow_admin_statements=1
## 记录执行较慢的未使用索引的语句
log_queries_not_using_indexes=1
本文由作者按照 CC BY 4.0 进行授权

MySQL管理

MySQL主从复制