5.4.1选择常规查询和慢速查询日志输出目的地




如果启用了这些日志,则MySQL服务器可以灵活地控制输出到普通查询日志和慢速查询日志的目标。日志条目的可能目标是日志文件或 数据库中的general_log和 slow_log表mysql。可以选择任一个或两个目的地。




服务器启动时的日志控制。 该--log-output选项指定日志输出的目的地。该选项本身不会启用日志。它的语法是 : --log-output[=value,...]




如果--log-output给定值,则该值应该是一个或多个单词TABLE(记录到表), FILE(记录到文件)或 NONE(不记录到表或文件)的以逗号分隔的列表。 NONE如果存在的话,优先于任何其他说明符。




如果--log-output省略,则默认日志记录目标为FILE。




该general_log系统变量控制记录到一般查询日志选定的日志目的地。如果在服务器启动时指定, general_log则使用1或0的可选参数来启用或禁用日志。要指定文件记录的默认文件名以外的其他文件名,请设置 general_log_file变量。同样,slow_query_log 变量控制记录到所选目标的缓慢查询日志并设置 slow_query_log_file指定文件记录的文件名。如果启用了任一日志,则服务器将打开相应的日志文件并向其写入启动消息。但是,除非FILE选择了日志目标,否则不会进一步将查询记录到文件。




例子:




要将常规查询日志条目写入日志表和日志文件,请使用 --log-output=TABLE,FILE选择两个日志目标并 --general_log启用常规查询日志。




要将常规和慢查询日志条目仅写入日志表,请使用--log-output=TABLE 选择表作为日志目标, --general_log并 --slow_query_log启用两个日志。




要仅将慢速查询日志条目写入日志文件,请使用 --log-output=FILE选择文件作为日志目标并 --slow_query_log启用慢速查询日志。(在这种情况下,由于默认日志目的地是FILE,您可以省略该 --log-output选项。)




运行时的日志控制。与日志表和文件关联的系统变量支持运行时控制日志记录:




全局log_output系统变量指示当前的日志记录目标。它可以在运行时修改以更改目标。




全局变量general_log和 slow_query_log变量指示常规查询日志和慢查询日志是启用(ON)还是禁用(OFF)。您可以在运行时设置这些变量来控制是否启用日志。




全局 变量general_log_file 和slow_query_log_file变量指示一般查询日志和慢速查询日志文件的名称。您可以在服务器启动时或运行时设置这些变量以更改日志文件的名称。




要禁用或启用当前连接的常规查询记录,请将会话sql_log_off变量设置 为 ON或OFF。




使用表格进行日志输出具有以下好处:




日志条目具有标准格式。要显示日志表的当前结构,请使用以下语句:

SHOW CREATE TABLE mysql.general_log;
SHOW CREATE TABLE mysql.slow_log;
SHOW CREATE TABLE mysql.general_log;
SHOW CREATE TABLE mysql.slow_log;

日志内容可通过SQL语句访问。这使得能够使用仅选择满足特定标准的日志条目的查询。例如,要选择与特定客户端关联的日志内容(这可以用于识别来自该客户端的有问题的查询),使用日志表比日志文件更容易。




可以通过任何可连接到服务器并发出查询的客户端(如果客户端具有适当的日志表权限)远程访问日志。没有必要登录到服务器主机并直接访问文件系统。




日志表实现具有以下特征:




一般来说,日志表的主要目的是为用户提供一个接口,以观察服务器的运行时执行情况,而不会干扰其运行时执行。




CREATE TABLE, ALTER TABLE并且 DROP TABLE是日志表上的有效操作。对于ALTER TABLE 和DROP TABLE,日志表不能被使用,并且必须被禁用,如后面所述。




默认情况下,日志表使用CSV 以逗号分隔值格式写入数据的存储引擎。对于有权访问 .CSV包含日志表数据的文件的用户,这些文件很容易导入其他程序,例如可处理CSV输入的电子表格。




日志表可以更改为使用 MyISAM存储引擎。您不能使用它 ALTER TABLE来更改正在使用的日志表。日志必须先禁用。除日志表以外CSV或 没有其他引擎MyISAM合法的日志表。




要禁用日志记录以便可以更改(或删除)日志表,可以使用以下策略。该示例使用通用查询日志; 慢查询日志的过程类似,但使用slow_log表和 slow_query_log系统变量。

学什么专业好


SET @old_log_state = @@global.general_log;
SET GLOBAL general_log = 'OFF';
ALTER TABLE mysql.general_log ENGINE = MyISAM;
SET GLOBAL general_log = @old_log_state;
SET @old_log_state = @@global.general_log;
SET GLOBAL general_log = 'OFF';
ALTER TABLE mysql.general_log ENGINE = MyISAM;
SET GLOBAL general_log = @old_log_state;
  • TRUNCATE TABLE是日志表上的有效操作。它可以用来过期日志条目。
  • RENAME TABLE是日志表上的有效操作。您可以使用以下策略以原子方式重命名日志表(例如,执行日志轮转):
USE mysql;
DROP TABLE IF EXISTS general_log2;
CREATE TABLE general_log2 LIKE general_log;
RENAME TABLE general_log TO general_log_backup, general_log2 TO general_log;
USE mysql;
DROP TABLE IF EXISTS general_log2;
CREATE TABLE general_log2 LIKE general_log;
RENAME TABLE general_log TO general_log_backup, general_log2 TO general_log;
  • CHECK TABLE 是日志表上的有效操作。
  • LOCK TABLES 不能在日志表上使用
  • INSERT, DELETE并且 UPDATE不能在日志表上使用。这些操作只能在服务器内部进行。
  • FLUSH TABLES WITH READ LOCK并且read_only 系统变量的状态对日志表没有影响。服务器始终可以写入日志表。
  • 写入日志表的条目不写入二进制日志,因此不会复制到从属服务器。
  • 要刷新日志表或日志文件,分别使用 FLUSH TABLES或 FLUSH LOGS。
  • 不允许对日志表进行分区。
  • 一个mysqldump的转储包括报表中重新创建这些表,以便它们不会重新加载转储文件后失踪。日志表内容不会被转储。