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
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
13.4 通用查询日志
13.4.1 启动和设置通用查询日志
打开通用查询日志,在my.ini(或my.cnf)的[mysqld]组下加入log选项。
[mysqld]
log[=path / [filename]]
13.4.2 查看通用查询日志
通用查询日志是以文本文件的形式存储在文件系统中的。可以使用文本编辑器直接打开通用日志文件进行查看,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.10】查看慢查询日志。使用文本编辑器打开数据目录下的Kevin-slow.log文件,文件部分如下:
C:Program FilesMySQLMySQL Server 5.7inmysqld, Version: 5.7.22-log (MySQL Community Server
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的值,可以灵活的掌握不同程度的慢查询语句。