2. 查询日志(Query Log)

  MySQL中的查询日志分两种:

  • 普通日志(General Query Log):
  • 慢日志(Slow Query Log):

2.1 普通查询日志(The General Query Log)

  普通查询日志记录mysqld所做的操作,比如当客户端连接或断开连接时,服务器都会向该文件中写入相关信息,客户端发出的SQL语句也会被记录到普通查询日志中。通过该日志文件可以查询客户端都提交了什么,这点对DBA会很有帮助,举例来说DBA怀疑客户端执行的操作有问题,就可以通过普通查询日志确定客户端究竟执行的是什么。

  Mysqld将接收到的语句按照接收的顺序(注意不是执行顺序)写到查询日志文件中。

  控制普通查询日志文件的输出主要有下列几点:

  • 在5.1.6版本之前,普通查询日志只能记入操作系统文件,要启用日志记录功能,可以在启动mysqld进程时附加--log[=file_name]参数(或简写形式-l [file_name]);
  • 自5.1.6版本起,查询日志也可写到数据库系统中的专用表;
  • 自5.1.6版本起,启用mysqld进程时附加--log[=file_name]或-l [file_name]参数启用查询日志记录功能,通过--log-output指定日志输出类型,有表(TABLE)和日志文件(FILE)两个选项;
  • 自5.1.12版本起,新增--general_log[={0|1}]参数指定普通查询日志的输出状态,用来启用或禁用普通查询日志,默认值为1即启用,指定值为0时,表示禁用普通查询日志。
  • 自5.1.29版本起,新增--general_log_file=file_name指定日志文件名,原--log和-l参数被废弃。

  如果指定参数时没有给查询日志指定文件名,则默认文件名为host_name.log,保存在mysql的data目录下。

  MySQL数据库运行时也可以控制查询日志的输出,主要通过系统环境变量:

  • general_log:设置值为0表示禁用,设置值为1表示启用;
  • general_log_file:设置日志文件存储路径及文件名;
  • log-output:控制输出类型,注意如果设置该参数值为"NONE",那么即使上面两个参数均启用日志输出,也不会有任何时间真正被输出,如果要输出日志到文件,那么log-output参数值中必须包含有"FILE"参数值。

  MySQL服务重新启动,或者刷新日志都不会生成新的普通查询日志文件,要生成新的日志文件,UNIX系统下可以通过mv命令,例如:

    shell> mv host_name.log host_name-old.log

    shell> mysqladmin flush-logs

    shell> cp host_name-old.log backup-directory

    shell> rm host_name-old.log

  如果是windows平台的话,在5.1.3版本之间,数据库系统运行过程中是不能修改日志文件名的,必须停止服务,然后重命令文件,然后再重启服务。

  从5.1.12版本开始,可以实时启用或禁用普通查询日志,不需要重启服务,例如:

    SET GLOBAL general_log = ¨OFF¨;

    SET GLOBAL general_log = ¨ON¨;

  如果要启用或禁用某个会话产生的普通查询日志,可以通过在会话级设置SQL_LOG_OFF参数的值为OFF/ON来控制。