常规查询日志和慢查询日志的输出目标

常规查询日志和慢查询日志的输出目标

常规查询日志和慢查询日志可以动态调整,并且可以写入日志表 ( mysql.general_log 和 mysql.slow_log) 或日志文件。

系统变量

输出目标

  • log_output
    • 指定日志输出目标。

    • 设置此变量并不会启用日志

    • 变量值

        • 如果未指定此变量,则默认记录目标为文件
      • 列表值
        --log_output=TABLE,FILE --general_log
        --log_output=TABLE --general_log --slow_query_log
        --log_output=FILE --slow_query_log
        
        • 可以为 TABLE,FILE,NONE

常规查询日志

  • general_log
    • 控制开启/禁用常规查询日志

    • 会话级变量

      常规查询日志开启的情况下,还可以为会话启用或禁用常规查询日志。

      • sql_log_off
  • general_log_file
    • 常规查询日志的文件名

慢查询日志

  • slow_query_log
    • 控制开启/禁用慢查询日志
  • slow_query_log_file
    • 慢查询日志的文件名

日志表的优点和特征

如果 –log-output 中包含 TABLE,则会使常规查询日志和慢查询日志输出到表中。日志表的目的是为用户提供一个查询界面,而不干扰服务器的运行。

优点

  • 日志条目具有标准格式
  • 日志内容可以使用 SQL 语句查询,便于筛选
  • 可以通过客户端查询,无需登录主机和文件系统

特征

  • 日志表默认使用 CSV 存储引擎
    • CSV 格式便于导入其他程序,如 Excel
    • 日志表也支持 MyISM 存储引擎,更换存储引擎之前要先禁用日志表
    • Too many open files 的报错
      • 错误原因
        • 服务运行时,重复禁用和启用日志表会导致这个错误
      • 解决方法
        • flush tables
        • 或调整参数,使 open_files_limit 大于 table_open_cache_instances
  • 有效操作
    • create/alter/drop table
      • alter/drop table 时,日志表必须禁用
        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;
        
    • check table
      • 检查表
    • flush tables,flush logs
      • 刷新日志表或日志文件
  • 不能用于日志表的操作
    • lock tables
    • insert/delete/update
      • 只允许服务器内部操作,不允许手动操作
    • 日志表不允许分区

  • 无影响的操作

    • flush tables with lock 和系统变量 read only
    • 日志表的内容不会被 mysqldump 导出
    • 写入日志表的条目不会写入二进制日志,所以也不会被复制到从节点

发表评论

您的电子邮箱地址不会被公开。 必填项已用*标注