MySQL日志
13.1 日志简介
MySQL日志主要分为4类
● 错误日志,记录MySQL服务的启动、运行或停止MySQL服务时出现的问题。
● 查询日志,记录建立的客户端连接和执行的语句。
● 二进制日志,记录所有更改数据的语句。可以用于数据复制。
● 慢查询日志,记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询。
13.2 二进制日志
13.2.1 启动和设置二进制日志
默认情况下,二进制日志是关闭的。可以通过修改MySQL的配置文件来启动和设置二进制日志。my.ini中[mysqld]组下面有几个设置是关于二进制日志的:
添加如下配置即可打开二进制
[mysqld]
log-bin [=path/ [filename] ]
expire_logs_days = 10
max_binlog_size = 100M
path是日志文件所在的目录路径,filename是日志的文件名;expire_logs_days定义了mysql清除过期日志的时间;max_binlog_size是定义单个文件的大小,如果超过这个文件大小则重新打开一个新的日志文件(大小为不能超过1GB,不能小于4096B)
查询日志设置
使用show variables语句
show variables 'log_%'
13.2.2 查看二进制日志
show binary logs语句可以查看当前的二进制日志文件个数及其文件名。
MySQL二进制日志并不能直接查看,如果要查看日志内容,可以通过mysqlbinlog命令(后面需接二进制文件名)查看。
13.2.3 删除二进制日志
1.使用RESET MASTER语句删除所有二进制日志。
2.使用PURGE MASTER LOGS语句删除指定的日志文件。
v13.2.4 使用二进制日志还原数据库
如果MySQL服务器启用了二进制日志,在数据库出现意外丢失数据时,可以使用mysqlbinlog工具从指定的时间点开始(例如,最后一次备份)直到现在或另一个指定的时间点的日志中恢复的数据。
13.2.5 暂时停止二进制日志功能
通过SET SQL_LOG_BIN语句可以使用MySQL暂停或者启动二进制日志。
暂停二进制日志:
SET sql_log_bin = 0;
恢复二进制日志 :
SET sql_log_bin = 1;
13.3 错误日志
13.3.1 启动和设置错误日志
在默认情况下,错误日志会记录到数据库的数据目录下。如果没有在配置文件中指定文件名,则文件名默认为hostname.err。
[mysqld]
log-error=[path / [file_name] ]
13.3.2 查看错误日志
通过错误日志可以监视系统的运行状态,便于及时发现故障和修复故障。MySQL错误日志是以文本文件形式存储的,可以使用文本编辑器直接查看MySQL错误日志。
SHOW VARIABLES LIKE 'log_error';
###13.3.3 删除错误日志
MySQL的错误日志是以文本文件的形式存储在文件系统中。可以直接删除错误日志文件。
mysqladmin -u root -p flush-logs
服务端执行上述命令,客户端登录的执行下面命令
flush-logs;
##13.4 通用查询日志
通用日志记录mysql的所有用户操作,包括启动和关闭服务、执行查询和更新语句等。
###13.4.1 启动和设置通用查询日志
默认情况下通用查询日志是关闭的
打开通用查询日志,在my.ini(或my.cnf)的[mysqld]组下加入log选项。
[mysqld]
log[=path / [filename]]
#### 开启通用查询日志的方法
set @@global.general_log=1;
#### 查看当前查询日志的状态
show variables like '%general%';
###13.4.2 查看通用查询日志
windows目录下日志通常在C:\ProgramData\MySQL\MySQL Server 8.0\Data下以.log结尾的文件
通用查询日志是以文本文件的形式存储在文件系统中的。可以使用文本编辑器直接打开通用日志文件进行查看,Windows下可以使用记事本,Linux下可以使用vim和gedit等。
###13.4.3 删除通用查询日志
可以用直接删除日志文件的方式删除通用查询日志。
重新建立新的通用查询日志文件:
mysqladmin –u root –p flush-logs
##13.5 慢查询日志
###13.5.1 启动和设置慢查询日志
MySQL中慢查询日志默认是关闭的,可以通过配置文件my.ini或者my.cnf中的log-slow-queries选项打开,也可以在MySQL服务启动的时候使用**--log-slow-queries[=file_name]**启动慢查询日志。
[mysqld]
log-slow-queries[=path / [filename] ]
###13.5.2 查看慢查询日志
MySQL的慢查询日志是以文本形式存储的,可以直接使用文本编辑器查看。
###13.5.3 删除慢查询日志
慢查询日志也可以直接删除。删除后在不重启服务器的情况下。
重新生成慢查询日志文件:
mysqladmin –u root –p flush-logs
flush logs
##13.6 MySQL 8.0的新特性——日志分类更详细
在MySQL 8.0版本中,日志分类将更加详细。例如在错误信息中添加了错误信息编号[MY-010311]和错误所属子系统[Server]。
在MySQL 8.0版本中,部分错误日志如下:
MySQL 8.0新特性
2018-06-21T17:53:13.040295+08:00 28 [Warning] [MY-010311] [Server] 'proxies_priv' entry '@ root@localhost' ignored in --skip-name-resolve mode.
2018-06-21T17:53:13.040520+08:00 28 [Warning] [MY-010330] [Server] 'tables_priv' entry 'user mysql.session@localhost' ignored in --skip-name-resolve mode.
##13.7 综合案例——MySQL日志的综合管理
本章详细介绍了MySQL日志的管理。MySQL日志包括:二进制日志、错误日志、通用查询日志和慢查询日志设置等类型。通过本章学习,读者将学会各类日志的启动、查看和删除,以及如何使用二进制日志还原数据库。下面的综合案例将帮助读者建立执行这些操作的能力。
###疑难解惑
####平时因该打开哪些日志
日志既会影响MySQL的性能,又会占用大量磁盘空间。因此,如果不必要,应尽量少的开启日志。根据不同的使用环境,可以考虑开启不同的日志。例如在开发环境中优化**查询效率低的语句,可以开启慢查询日志**;如果需要**记录用户的所有查询操作,就可以开启通用查询日志**,**如果需要记录数据的变更,就可以开启二进制日志**,错误日志是默认开启的。
####如何使用二进制日志
二进制日志主要用来记录数据变更。如果需要记录数据库的变化,可以开启二进制日志。基于二进制日志的特性,不仅可以用来进行数据恢复,还可以用于数据复制。在数据库定期备份的情况下,如果出现数据丢失,就可以先用备份恢复大部分数据,然后再用二进制日志恢复最近备份后变更的数据。在双机热备的情况下,可以使用mysql的二进制日志记录数据的变更,然后将变更部分复制到备份服务器上。
####如何使用慢查询日志
慢查询日志主要用来记录查询时间较长的日志。在开发环境下,可以开启慢查询日志来记录查询时间较长的查询语句,然后对这些语句进行优化。通过配置long_query_time的值,可以灵活的掌握不同程度的慢查询语句。