文章目录
1、MySQL日志概述
- MySQL有四种日志文件:错误日志、通用日志、二进制日志和慢查询日志。默认情况下,所有日志均创建于mysqld数据目录中。
- 通过刷新日志,可以强制mysqld关闭和重新打开日志文件(或者在某些情况下切换到一个新的日志中)。当执行一个flush logs语句或执行mysqladmin flush-logs或mysqladmin refresh时,会使得日志刷新。
2、错误日志
2.1、日志内容
错误日志文件包含了服务器启停及运行过程中任何严重错误时的相关信息。
2.2、文件位置
- 可用–log-error[=file_name]选项指定错误日志的文件位置。否则将使用错误日志名host_name.err,并在数据目录中写入日志文件。
2.3、监控分析
可以使用swatch等工具实时监控错误日志,或者自己编写脚本检查错误日志。也可发送错误日志到系统日志服务Syslog,这样就可以利用一些日志分析工具集中分析和处理错误信息。
3、通用日志
3.1、日志内容
- 所有连接和语句都将被记录到日志文件中。
- 日志量是四个日志里最大的,所以非必要不打开,否则在一个生产繁忙的系统中,通用日志在几小时之内可能就会塞满磁盘。
3.2、打开方式和文件位置
- 服务器级打开方式:用–log[=file_name]或-l[file_name]选项启动通用日志。
- 会话级打开方式:可用SET GLOBAL general_log ON打开通用日志记录
- 如果没有给定file_name的值,那么默认名就是host_name.log。可用show variables like '%gene%'查看通用日志的路径。
4、二进制日志
4.1、日志内容
- 二进制日志包含了所有更新了数据或已经潜在更新了数据的语句及其执行时间。语句以“事件”(event)的形式保存,它描述了数据的更改信息。
- 二进制日志的主要目的是恢复数据,因为二进制日志包含备份后进行的所有更新。
- 二进制日志不包含没有修改任何数据的语句。如果想要记录所有的语句(例如,为了识别有问题的查询),那么我们应该使用通用日志。
5、慢查询日志
5.1、打开方式和文件位置
- 当参数slow_query_log=1时,mysqld将记录一个执行时间超过long_query_time秒的所有SQL语句的日志文件。
- 如果没有给出慢查询文件名,则默认为主机名,后缀为“-slow.log”。如果给出了文件名,但不是绝对路径名时,文件将会写入数据目录。
5.2、监控分析
要想让检查变得容易些,可以使用mysqldumpslow命令或pt-query-digest获得日志中显示的查询摘要来处理慢查询日志。
6、日志文件的维护
- 注意定期清理日志文件,以确保日志文件不会占用太多的硬盘空间。
- 错误日志文件,一般情况下不会变得很大;
- 慢查询日志在慢查询很多的情况下可能会变得很大,这时可能需要手动处理或编写脚本进行处理;
- 对于二进制日志文件,可以设置合适的过期策略,如expire-logs-days=10,该语句的意思是设置过期日期为10天。expi re_logs_days设置会在运行flush logs命令后触发删除过期的日志;
- 不要用操作系统下的rm命令删除日志,这可能会导致你执行日志清理的命令失败,你可能需要手动编辑文件hostname-bin.index才能修复这个问题。
7、总结
- MySQL共有错误日志、通用日志、二进制日志、慢查询日志四种。
- 一般通用日志会记录几乎所有信息,所以信息量巨大,不建议平时打开,只有出现问题时可以临时打开。
- 二进制日志记录的是所有数据更新的情况,主要用于数据恢复。
- 慢查询日志通过slow_query_log控制是否打开,用long_query_time控制慢查询语句的阀值。
- 注意日志的定期清理,特别是慢查询日志。
- 注意设置二进制日志合适的过期策略,例如设置expire-logs-days=180,则系统会在运行flush logs命令后自动触发删除180天前的二进制日志。