MySQL Server provides flexible control over the destination for
      log output. Log entries can be written to log files or to the
      general_log and slow_log
      tables in the mysql database. If logging is
      enabled, either or both destinations can be selected.
    
Currently, logging to tables incurs significantly more server overhead than logging to files. If you enable the general log or slow query log and require highest performance, you should log to files and not to tables.
      Log control at server startup.
      The --log-output option specifies
      the destination for log output, if logging is enabled, but the
      option does not in itself enable the logs. The syntax for this
      option is
      --log-output[=:
    value,...]
          If --log-output is given with a
          value, the value can be a comma-separated list of one or more
          of the words TABLE (log to tables),
          FILE (log to files), or
          NONE (do not log to tables or files).
          NONE, if present, takes precedence over any
          other specifiers.
        
          If --log-output is omitted or
          given without a value, the default logging destination is
          FILE.
        
      The --general_log option, if given,
      enables logging to the general query log for the selected log
      destinations. --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, use
      --general_log_file=.
      Similarly, the file_name--slow_query_log
      option, if given, enables logging to the slow query log for the
      selected destinations and
      --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_nameFILE log destination
      is selected.
    
Examples:
          To write general query log entries to the log table and the
          log file, use
          --log-output=TABLE,FILE to
          select both log destinations and the
          --general_log option to enable
          the general query log.
        
          To write general and slow query log entries only to the log
          tables, use --log-output=TABLE
          to select tables as the log destination and the
          --general_log and
          --slow_query_log options to
          enable both logs.
        
          To write slow query log entries only to the log file, use
          --log-output=FILE to select
          files as the log destination and the
          --slow_query_log option to
          enable the slow query log. (In this case, because the default
          log destination is FILE, you could omit the
          --log-output option.)
        
Log control at runtime. Several system variables are associated with log tables and files and enable runtime control over logging:
          The global log_output system
          variable indicates the current logging destination. It can be
          modified at runtime to change the destination.
        
          The global general_log and
          slow_query_log variables
          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 global general_log_file
          and slow_query_log_file
          variables 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.
        
          The session sql_log_off
          variable can be set to ON or
          OFF to disable or enable general query
          logging for the current connection.
        
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 via 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, and
          DROP TABLE are valid operations
          on a log table. For ALTER TABLE
          and DROP TABLE, the log table
          cannot be in use and must be disabled, as described later.
        
          By default, the log tables use the CSV
          storage engine that writes data in comma-separated values
          format. For users who have access to the
          .CSV files 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
          MyISAM storage engine. You cannot use
          ALTER TABLE to alter a log
          table that is in use. The log must be disabled first. No
          engines other than CSV or
          MyISAM are legal for the log tables.
        
          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_log table and
          slow_query_log system
          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 TABLE is a valid
          operation on a log table. It can be used to expire log
          entries.
        
          RENAME TABLE is 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; CREATE TABLE IF NOT EXISTS general_log2 LIKE general_log; RENAME TABLE general_log TO general_log_backup, general_log2 TO general_log;
          LOCK TABLES cannot be used on a
          log table.
        
          INSERT,
          DELETE, and
          UPDATE cannot be used on a log
          table. These operations are allowed only internally to the
          server itself.
        
          FLUSH TABLES WITH READ
          LOCK and the state of the global
          read_only system 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 slave servers.
          To flush the log tables or log files, use
          FLUSH TABLES
          or FLUSH
          LOGS, respectively.
        
Partitioning of log tables is not permitted.


User Comments
Add your own comment.