MySQL生成或相关联的日志文件种类繁多,本节重点关注与MySQL数据库服务相关的几类日志文件:

  • 错误日志(error log):记录MySQL服务进程mysqld在启动/关闭或运行过程中遇到的错误信息;
  • 查询日志(query log):又可分成两类:
    • 普通查询日志(general query log):记录客户端连接信息和执行的SQL语句信息;
    • 慢查询日志(slow query log):记录执行时间超出指定值(long_query_time)的SQL语句;
  • 二进制日志(binary log):记录数据被修改的相关信息;

1. 错误日志(Error Log)

  错误日志,顾名思义,当然就是记录错误信息的日志,不过本小节中要提到的错误日志文件,并不仅仅是记录错误信息,MySQL服务进程启动/关闭的信息也会被记录进来,也不是说什么错误都会记录,只有服务进程运行过程中发生的关键(critical)错误会被记录,另外mysqld进程发现某些表需要自动检查或修复的话,也会抛出相关信息到该日志文件。

    提示:

    MySQL中的error log日志文件,其实功能跟ORACLE中的alert极为相似,不过由名称也看得出MySQL果然还是嫩了点儿,error logs中即不全是error信息,也并非所有error都被记入log,这名称就有点儿名不副实了。还是ORACLE高明--alert,就是提示你要注意,咋理解都没毛病。

  在某些操作系统上运行的mysql崩溃时,会将堆栈的跟踪信息(stack trace)抛出到错误日志文件中,这些跟踪信息比较有利于故障排查。

  启用mysqld时附加--log-error参数(或配置log-error系统环境变量),指定错误日志的路径及文件名,如不指定的话,默认文件名为[host_name].err,保存在mysql的data文件夹下。执行FLUSH LOGS命令后,mysql会将当前错误日志文件附加-old保存,而且创建一个新的空错误日志文件(仅限指定--log-error的情况下会自动创建新文件)。

    提示:

    Windows环境中,事件和错误消息也会被写入windows的事件日志中,以应用程序的形式保存,并可能被标记为警告(Warning)或注意(Note),不过信息类的消息不会写入事件日志。

  --log-warnings参数(或log-warnings系统环境变量)用来控制警告信息是否记录,默认值为1即启用,指定为0时表示禁用。如果指定该参数值大于1,则连接失败的消息也会写入错误日志。

  使用mysqld_safe命令启动mysqld,mysqld_safe会将错误消息写到日志文件或者系统日志,在5.1.20版本之前,mysqld_safe的操作记录到文件;从5.1.20版本开始,mysqld_safe提供了两个新增错误日志选项:--syslog和--skip-syslog。从5.1.21版本开始,默认的不记录日志选项为--skip-syslog,该选项兼容5.1.20版本之前的错误日志行为。要明确指定输出的错误日志文件,就通过mysqld_safe启动服务时附加--log-error[=file_name]参数,如果要使用syslog,则指定--syslog参数。

  对于记录到syslog的消息,来自mysqld_safe和mysqld的消息会分别打上"mysqld_safe"或"mysqld"的标签,从5.1.21版本开始,还可以通过--syslog-tag=[tag]的方式指定标签的名称,修改后实际记录的标签形式会变成"mysql_safe-[tag]"和"mysqld-[tag]"。

  如何是使用mysqld_safe命令启动mysqld进程,并且mysqld意外崩溃,则mysqld_safe将尝试重新启动mysqld进程,并且向错误日志中记录"restarted mysqld"信息。