如果启用了这些日志,则 MySQL 服务器可以灵活地控制写入一般查询日志和慢速查询日志的输出目的地。日志条目的可能目的地是日志文件或
系统数据库中general_log的
slow_log表。mysql可以选择文件输出、表格输出或两者。
log_output系统变量指定日志输出的目的地
。设置这个变量本身并不会启用日志;它们必须单独启用。
如果
log_output在启动时未指定,则默认日志记录目标为FILE.如果
log_output在启动时指定,它的值是一个列表,一个或多个逗号分隔的单词,选自TABLE(记录到表)、FILE(记录到文件)或NONE(不记录到表或文件)。NONE,如果存在,优先于任何其他说明符。
The general_log system variable
controls logging to the general query log for the selected log
destinations. If specified at server startup,
general_log takes an optional
argument of 1 or 0 to enable or disable the log. To specify a
file name other than the default for file logging, set the
general_log_file variable.
Similarly, the slow_query_log
variable controls logging to the slow query log for the selected
destinations and setting
slow_query_log_file specifies a
file name for file logging. If either log is enabled, the server
opens the corresponding log file and writes startup messages to
it. However, further logging of queries to the file does not
occur unless the FILE log destination is
selected.
Examples:
To write general query log entries to the log table and the log file, use
--log_output=TABLE,FILEto select both log destinations and--general_logto enable the general query log.To write general and slow query log entries only to the log tables, use
--log_output=TABLEto select tables as the log destination and--general_logand--slow_query_logto enable both logs.To write slow query log entries only to the log file, use
--log_output=FILEto select files as the log destination and--slow_query_logto enable the slow query log. In this case, because the default log destination isFILE, you could omit thelog_outputsetting.
The system variables associated with log tables and files enable runtime control over logging:
The
log_outputvariable indicates the current logging destination. It can be modified at runtime to change the destination.The
general_logandslow_query_logvariables indicate whether the general query log and slow query log are enabled (ON) or disabled (OFF). You can set these variables at runtime to control whether the logs are enabled.The
general_log_fileandslow_query_log_filevariables indicate the names of the general query log and slow query log files. You can set these variables at server startup or at runtime to change the names of the log files.To disable or enable general query logging for the current session, set the session
sql_log_offvariable toONorOFF. (This assumes that the general query log itself is enabled.)
The use of tables for log output offers the following benefits:
Log entries have a standard format. To display the current structure of the log tables, use these statements:
SHOW CREATE TABLE mysql.general_log; SHOW CREATE TABLE mysql.slow_log;Log contents are accessible through SQL statements. This enables the use of queries that select only those log entries that satisfy specific criteria. For example, to select log contents associated with a particular client (which can be useful for identifying problematic queries from that client), it is easier to do this using a log table than a log file.
Logs are accessible remotely through any client that can connect to the server and issue queries (if the client has the appropriate log table privileges). It is not necessary to log in to the server host and directly access the file system.
The log table implementation has the following characteristics:
In general, the primary purpose of log tables is to provide an interface for users to observe the runtime execution of the server, not to interfere with its runtime execution.
CREATE TABLE,ALTER TABLE, andDROP TABLEare valid operations on a log table. ForALTER TABLEandDROP TABLE, the log table cannot be in use and must be disabled, as described later.By default, the log tables use the
CSVstorage engine that writes data in comma-separated values format. For users who have access to the.CSVfiles that contain log table data, the files are easy to import into other programs such as spreadsheets that can process CSV input.The log tables can be altered to use the
MyISAMstorage engine. You cannot useALTER TABLEto alter a log table that is in use. The log must be disabled first. No engines other thanCSVorMyISAMare legal for the log tables.Log Tables and “Too many open files” Errors. If you select
TABLEas a log destination and the log tables use theCSVstorage engine, you may find that disabling and enabling the general query log or slow query log repeatedly at runtime results in a number of open file descriptors for the.CSVfile, possibly resulting in a “Too many open files” error. To work around this issue, executeFLUSH TABLESor ensure that the value ofopen_files_limitis greater than the value oftable_open_cache_instances.To disable logging so that you can alter (or drop) a log table, you can use the following strategy. The example uses the general query log; the procedure for the slow query log is similar but uses the
slow_logtable andslow_query_logsystem variable.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 TABLEis a valid operation on a log table. It can be used to expire log entries.RENAME TABLEis a valid operation on a log table. You can atomically rename a log table (to perform log rotation, for example) using the following strategy: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 TABLEis a valid operation on a log table.LOCK TABLEScannot be used on a log table.INSERT,DELETE, andUPDATEcannot be used on a log table. These operations are permitted only internally to the server itself.FLUSH TABLES WITH READ LOCKand the state of theread_onlysystem variable have no effect on log tables. The server can always write to the log tables.Entries written to the log tables are not written to the binary log and thus are not replicated to replicas.
To flush the log tables or log files, use
FLUSH TABLESorFLUSH LOGS, respectively.Partitioning of log tables is not permitted.
mysqldump转储包括重新创建这些表 的语句,以便在重新加载转储文件后它们不会丢失。不转储日志表内容。