5.4.1 选择常规查询日志和慢查询日志输出目标

如果启用了 MySQL 日志,则 MySQL Server 可以灵活控制写入普通查询日志和慢速查询日志的输出目标。日志条目的可能目标是日志文件或mysql系统数据库中的general_logslow_logtable。可以选择文件输出,table 输出或两者。

服务器启动时的日志控制

log_output系统变量指定日志输出的目标。设置此变量本身并不会启用日志。必须分别启用它们。

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

Examples:

运行时的日志控制

与日志 table 和文件相关联的系统变量可对日志进行运行时控制:

日志 table 的优点和 Feature

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

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

日志 table 实现具有以下 Feature:

可以将日志 table 更改为使用MyISAM存储引擎。您不能使用ALTER TABLE来更改正在使用的日志 table。必须先禁用日志。 CSVMyISAM以外的任何引擎均不可用于日志 table。

日志 table 和“打开的文件太多”错误. 如果您选择TABLE作为日志目标并且日志 table 使用CSV存储引擎,则可能会反复禁用和启用常规查询日志或慢速查询日志在运行时会导致.CSV文件的许多打开文件 Descriptors,可能会导致“打开的文件太多”错误。要变通解决此问题,执行FLUSH TABLES或确保open_files_limit的值大于table_open_cache_instances的值。

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;
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;
首页