在MySQL中,有4种不同的日志,分别是错误日志、二进制日志(BINLOG日志)、查询日志和慢查询日志。
一、错误日志
错误日志记录了当mysqld启动和停止时,以及服务器在运行过程中发生任何严重错误时的相关信息。当数据库出现任何故障导致无法正常使用时,可以首先查看此日志。
可以用--log-error[=file_name]选项来指定mysqld(MySQL服务器)保存错误日志文件的位置。如果没有给定file_name值,mysqld使用错误日志名host_name.err(host_name为主机名)并默认在参数DATADIR(数据目录)指定的目录中写入日志文件。也可以在mysql配置文件my.ini中进行配置,配置示例:log-error="WJT-PC.err"。
错误日志是纯文本文件,可以直接查看。
二、二进制日志
二进制日志(BINLOG)记录了所有的DDL(数据定义语言)语句和DML(数据操纵语言)语句,但是不包括数据查询语句。语句以“事件”的形式保存,它描述了数据的更改过程。此日志对于灾难时的数据恢复起着极其重要的作用。
1. 日志的位置和格式:
当用--log-bin[=file_name]选项启动时,mysqld将包含所有更新数据的SQL命令写入日志文件。如果没有给出file_name值,默认名为主机名后面跟“-bin”。如果给出了文件名,但没有包含路径,则文件默认被写入参数DATADIR(数据目录)指定的目录。也可以在mysql配置文件my.ini中进行配置,配置示例:log-bin="WJT-PC-bin.log"。
2. 日志的读取:
由于日志以二进制方式存储,不能直接读取,需要用mysqlbinlog工具来查看,语法如下:
mysqlbinlog log-file;
注意:
直接mysqlbinlog出来的文件执行sql部分的sql显示为base64编码格式,生成sql记录的时候,不能用常规的办法去生成,需要加上相应的参数才能显示出sql语句:--base64-output=decode-rows -v。
使用示例:
mysqlbinlog --base64-output=decode-rows -v WJT-PC-bin.000005
3. 日志的删除:
方法一:
执行“RESET MASTER;”命令,该命令将删除所有BINLOG日志,新日志编号从“000001”开始。
方法二:
执行“PURGE MASTER LOGS TO 'mysql-bin.******'”命令,该命令将删除“******”编号之前的所有日志。
方法三:
执行“PURGE MASTER LOGS BEFORE 'yyyy-mm-dd hh:mm:ss'”命令,该命令将删除日期为“yyyy-mm-dd hh:mm:ss”之前产生的所有日志。
方法四:
设置参数--expire_logs_days=#,此参数的含义是设置日志的过期天数,过了指定天数的日志将会被自动删除,这样将将有利于减少DBA管理日志的工作量。
4. 和binlog相关的其他选项:
(1)--binlog-do-db=db_name
该选项告诉主服务器,如果当前的数据库(即USE选定的数据库)是db_name,应将更新记录到二进制日志中。其他所有没有显式指定的数据库更新将被忽略,不记录在日志中。
(2)--binlog-ignore-db=db_name
该选项告诉主服务器,如果当前的数据库(即USE选定的数据库)是db_name,不应将更新保存到二进制日志中,其他没有显式忽略的数据库都将进行记录。
如果想记录或忽略多个数据库,可以对上面两个选项分别使用多次,即对每个数据库指定相应的选项。例如,如果只想记录数据库db1和db2的日志,可以在配置文件中设置两行:
--binlog-do-db=db1
--binlog-do-db=db2
(3)--innodb-safe-binlog
此选项经常和--sync-binlog=N(每写N 次日志同步磁盘)一起配合使用,使得事务在日志中的记录更加安全。
(4)SET SQL_LOG_BIN=0
具有SUPER权限的客户端可以通过此语句禁止将自己的语句记入二进制记录。这个选项在某些环境下是有用的,但是使用时一定要小心,因为它很可能造成日志记录的不完整或者在复制环境中造成主从数据的不一致。
(5)命令flush logs;触发日志更新,创建新日志。
三、查询日志
查询日志记录了客户端的所有语句,而二进制日志不包含只查询数据的语句。
1. 日志的位置和格式:
当用--log[=file_name]或-l [file_name]选项启动mysqld(MySQL 服务器)时,查询日志开始被记录。和其他日志一样,如果没有给定file_name 的值,日志将写入参数DATADIR(数据目录)指定的路径下,默认文件名是host_name.log。
Mysql5.7配置文件中对于查询日志的相关配置:
general-log=1 // 是否开启查询日志
general_log_file="WJT-PC.log" // 查询日志文件位置
2. 日志的读取:
因为查询日志记录的格式是纯文本,因此可以直接进行读取。
注意:
log日志中记录了所有数据库的操作,对于访问频繁的系统,此日志对系统性能的影响较大,建议一般情况下关闭。
四、慢查询日志
1. 日志位置和格式:
当用--log-slow-queries[=file_name]选项启动mysqld(MySQL 服务器)时,慢查询日志开始被记录。和前面几种日志一样,如果没有给定file_name 的值,日志将写入参数DATADIR(数据目录)指定的路径下,默认文件名是host_name-slow.log。
Mysql5.7配置文件中对于慢查询日志的相关配置:
slow-query-log=1 // 是否开启慢查询日志
slow_query_log_file="WJT-PC-slow.log" // 慢查询日志文件位置
long_query_time=10 // 慢查询时间设置
2. 日志读取:
和错误日志、查询日志一样,慢查询日志记录的格式也是纯文本,可以被直接读取。如果慢查询日志中记录内容很多,可以使用mysqldumpslow工具(MySQL 客户端安装自带)来对慢查询日志进行分类汇总。
注意:
慢查询日志对于我们发现应用中有性能问题的SQL很有帮助,建议正常情况下,打开此日志并经常查看分析。
3. 和慢查询相关的其他选项:
通过--log-slow-admin-statements服务器选项,可以请求将慢管理语句,例如OPTIMIZE TABLE、ANALYZE TABLE和ALTER TABLE写入慢查询日志。