2.3 配置查询日志输出路径

  从5.1.6版本开始,MySQL提供了更灵活的方式控制日志文件的输出以及输出路径。MySQL的标准日志(特指general_log和slow_log),即可以输出到文件,同时也能够以表的形式保存在数据库mysql中的同名表内,而在5.1.6版本之前,只记录日志到文件。

    提示:

    从5.1.6版本开始,日志表会在安装过程中随其它系统表一同创建。如果是从5.1.6之前的版本升级而来,那么DBA需要注意,要手动升级系统表,以确保相关日志表存在。

  当前,日志记录到系统的专用日志表中,要比记录到文件耗费更多的系统资源,因此对于需要启用日志,又需要能够获得更高的系统性能,那么建议优先记录到文件。

  不过,记录到系统表当然也有它的好处,比如说这类表可以通过简单的授权,即可让所有连接到MySQL数据库的用户查看到日志中记录的内容,而且日志表可以通过SQL语句访问,这样也能够比较便捷的通过SQL语句的强大功能进行数据过滤,这都是日志文件不易做到的功能。

2.3.1 服务启动时进行配置

  MySQL的命令行在启动时可以加载很多参数,其中就提供了一个日志专用的参数--log-output,用来指定日志文件的输出方式,注意,说的是输出方式,也就是说到底是记录到操作系统中的文件,还是记录到数据库系统中的专用表。

  --log-output参数可选值有三个:

  • TABLE:记录到数据库中的日志表;
  • FILE:记录到日志文件,默认值即为FILE (在5.1.6到5.1.20版本时,默认值为TABLE);
  • NONE:不记录。

  上述参数值在设置时可以同时指定多个,相互之间以","逗号分隔即可。

  在指定--log-output参数值不为NONE的基础上,才有可能继续日志文件输出路径的设置,要控制普通查询日志或是慢查询日志文件的生成,又有另外的参数:

  • --general_log:控制是否生成普通查询日志,可选值有两个:1表示启用,0表示禁用,默认值为:0,不过当指定了该参数而不指定参数值时,默认值为1;
  • --general_log_file:5.1.29版本后开始支持该参数,用来指定普通查询日志文件的文件名及输出路径,默认文件名为[host_name].log;
  • --slow_query_log:控制是否生成慢查询日志,可选值有两个:1表示启用,0表示禁用,默认值为:0,不过当指定了该参数而不指定参数值时,默认值为1;
  • --slow_query_log_file:5.1.29版本后开始支持该参数,用来指定慢查询日志文件的文件名及输出路径,默认文件名为[host_name]-slow.log:

    提示:

    在5.1.29版本之前,没有--general_log_file和--slow_query_log_file这两个参数,控制文件名及输出路径是通过--log和--log-slow-queries两个参数。
  • --log:指定普通查询日志的输出路径,并启用日志输出功能,默认文件名为[host_name].log,该参数在5.1.29版本后废弃;
  • --log-slow_queries:指定慢查询日志的输出路径,并启用日志输出功能,默认文件名为[host_name]-slow.log,该参数在5.1.29版本后废弃。

  文学描述如果觉着不够清晰,那就看下面几个例子再强化一下吧,比如说:

  • 仅启用普通查询日志,并记录到日志文件和日志表,则启动mysql服务时设置参数如下:
    --log-output=TABLE,FILE --general_log 
  • 启用普通查询日志和慢查询日志,日志记录到数据库中的日志表,启动mysql服务时设置参数如下:
    --log-output=TABLE --general_log --slow_query_log
  • 仅启用慢查询日志,记录到日志文件,设置参数如下:
    --log-output=FILE --slow_query_log
  • 仅启用慢查询日志,记录到日志文件,并指定输出路径,设置参数如下:
    --log-output=FILE --slow_query_log --slow_query_log_file=/data/mysql/logs/slow.log

2.3.2 服务运行中进行配置

  MySQL提供了非常多的系统环境变量,用来控制MySQL服务运行时的状态。

  其中,有不少的系统变量与MySQL命令行中的参数相似度极高,甚至包括名称、功能、参数值语法等都一模一样,如果要说有区别的话,就是命令行参数是在命令执行时调用,一经设置,除非重新运行命令行,否则无法修改,而很多系统环境变量,则支持服务运行过程中进行动态的修改,这其中,就包括与日志文件配置相关的一些参数:

  • log_output:
  • general_log&slow_query_log:
  • general_log_file&slow_query_log_file:

  上面这几个参数均支持全局动态修改,参数的功能与前面命令行中同名参数完全相同,就不多说了,着重描述下面这个参数:

  • sql_log_off:可选参数值为ON/OFF(1/0亦可,MySQL系统环境变量的设置非常灵活,将另起章节专门描述),用来指定是否启用/禁用当前会话执行的语句记录到普通查询日志,默认值为OFF。该参数是个会话级参数,用户必须要拥有SUPER权限才能够设置该选项。