MySQL 日志功能详解

  • MySQL日志分类
1:查询日志 :query log
 
 
2:慢查询日志:slow_query_log 查询执行时长超过指定时长的查询操作所记录日志
 
 
3:错误日志:error log
 
 
4:二进制日志:binary log
 
 
5:中继日志:relay log (主从复制会讲解)
 
 
6:事务日志:transaction log
 
  • 查询日志 (query log一般不启用)
general_log = {ON|OFF}: 是否启用查询日志
 
general_log_file = /logs/mysql/general_log:当log_output为FILE类型时,日志信息的记录位置;
 
log_output = {TABLE|FILE|NONE}
 
    log_output = TABLE,FILE
 
  • 慢查询日志 (slow_query_log 必须启用)
慢查询日志产生的来源
 
    SQL语句返回的结果集大,或者SQL语句没有被优化器优化,或SQL语句没有使用索引
 
 
慢查询日志的作用
 
    慢查询日志用于对执行速率较慢的SQL语句就像过滤,有利于SQL代码的优化
 
 
1:执行时长超出指定时长的操作
 
    show global variables like 'long_query_time'; 查看指定的时长
 
    set global long_query_time = 自定义时长
 
 
2:slow_query_log = {ON|OFF}:是否启用慢查询日志
 
set global slow_query_log = ON
 
 
3:slow_query_log_file = mariadb1-slow.log
 
 
4:log_slow_filter = admin,filesort,filesort_on_disk,full_join,full_scan,query_cache,query_cache_miss,tmp_table,tmp_table_on_disk 过滤条件
 
 
5:log_slow_rate_limit = 1 指定记录速率
 
 
6:log_slow_verbosity = 指定内容级别
 
  • 中继日志(relay log)
在主从复制架构中,从服务器用于保存从主服务器的二进制日志中读取到的时间
 
  • 事物日志(transaction log)
事物日志由事物型存储引擎自行管理和使用,无需手动管理
 
    redo log:将一组SQL语句安装先后顺序再执行一次
 
    undo log:回滚到之前数据集没有发生改变的状态
 
  • 错误日志 (error log 必须启用)
1:错误日志信息产生的来源
 
    mysqld启动和关闭过程中输出的信息;
 
    mysqld运行中产生的错误信息;
 
    event scheduler运行一个event时产生的日志信息
 
    在主从复制架构中的从服务器上启动从服务器线程时产生的日志信息;
 
 
2:错误日志的作用
 
    二进制日志可以反应MySQL数据库的错误信息,用于调试
 
 
3:如何开启错误日志
 
    log_error = /path/to/somefile
 
    log_warnings = {ON|OFF}:是否记录警告信息于错误日志中;
 
  • 二进制日志(binary log)
1:二级制日志信息产生的来源
 
    记录导致数据改变,或者潜在改变数据的SQL语句
 
 
2:二级制日志的作用
 
    用于通过'重新执行'日志文件中的记录的事件(SQL语句)来生成数据副本,也就是用于主从复制
 
 
3:服务器变量
 
    (1)sql_log_bin = [on|off] 是否记录二进制日志, 通常为on
 
    (2)log_bin= on :记录位置,通常为on,如果为off,那么需要在my.cnf配置文件中添加一项:log_bin=mysql-bin,用来指明二进制日志保存的路径名,对于yum安装的MySQL,保存于/var/lib/mysql/mysql-bin.000001这样的二进制日志中
 
    (3)binlog_format = MIXED :二进制记录的格式
 
    (4)max_binlog_size = 1073741824 :单个二进制文件的最大值,默认为1G
 
        到达最大值会自动滚动
 
        文件达到上限的大小未必是精确值
 
    (5)max_binlog_cache_size = 18446744073709547520
 
    (6)sync_binlog = 0:设定多久同步一次二进制日志文件;0表示不同步;任何正值都表示记录多少个语句后同步一次;
 
 
4:查看二进制文件的信息
 
    show master status: 显示当前正在使用的二进制文件名
 
    show {binary | master} logs:查看当前二进制文件记录end_log_pos(结束位置)的值,其实当前正在记录的二进制文件的大小。
 
 
5:日志记录的格式分类
 
    基于“SQL语句”记录: statement
 
    基于“行”记录:row
 
    “混合模式” :mixed,系统自行判断
 
 
6:二进制日志文件的构成
 
    日志文件:mysql-bin.文件序号
 
        例如: mysql-bin.000001
 
 
    索引文件:mysql-bin.index
 
        例如:mysql-bin.index
 
 
7:使用 mysqlbinlog 客户端命令工具查看二进制文件
 
    mysqlbinlog /var/lib/mysql/mysql-bin.000001
 
 
8: 二进制格式解析
 
# at 19364
 
#140829 15:50:07 server id 1 end_log_pos 19486 Query thread_id=13 exec_time=0 error_code=0
 
SET TIMESTAMP=1409298607/*!*/;
 
GRANT SELECT ON tdb.* TO tuser@localhost
 
/*!*/;
 
# at 19486
 
 
事件发生的日期和时间;(140829 15:50:07)
 
事件发生在服务器的标识(server id)
 
事件的结束位置:(end_log_pos 19486)
 
事件的类型:(Query)
 
事件发生时所在的服务器执行此事件的线程的ID:(thread_id=13)
 
语句的时间戳与将其写入二进制文件中的时间差:(exec_time=0)
 
错误代码:(error_code=0)
 
事件内容:(SET TIMESTAMP=1409298607/*!*/;
 
GRANT SELECT ON tdb.* TO tuser@localhost)
 
GTID事件专属:
 
事件所属的全局事务的GTID:(GTID 0-1-2)
原文地址:https://www.cnblogs.com/liu1026/p/7467702.html