• 26.mysql日志


    26.mysql日志
    mysql日志包括:错误日志、二进制日志、查询日志、慢查询日志。

    26.1 错误日志
    错误日志记录了mysqld启动到停止之间发生的任何严重错误的相关信息。
    mysql故障时应首先查看错误日志。
    可以用--log-error= 选项来指定mysqld起动后错误日志保存得路径和文件名。
    不指定时默认路径为数据目录(datadir参数指定),默认文件名为host_name.err。

    26.2 二进制日志binlog
    二进制日志记录所有的DDL操作和DML操作,不包括DQL(select)操作,用于mysql复制和灾难恢复。
    26.2.1 日志的位置和格式
    参数log-bin指定了binlog的路径和文件名,默认路径为数据目录(datadir参数指定),默认文件名为host_name-bin.000001。
    binlog格式分为statement、row、mixed 3种,由参数binlog-format指定,默认使用mixed。
    1.statement:记录每条DDL和DML语句,从库依次执行该语句以达到主从同步的目的。
    优点:日志清晰易读,日志量少,对IO影响小。
    缺点:数据一致性差。
    2.row:记录DDL和DML语句影响到的每行变前、变后数据,从库更新变后数据以达到主从同步的目的。
    优点:记录数据变化细节,数据一致性高。
    缺点:日志量大,对IO影响大。
    3.mixed:对不确定SQL使用row格式记录binlog,对确定SQL使用statement格式记录binlog。
    不确定SQL指SQL适用的行数与数据有关是不确定的,例如update和delete语句不使用主键列作为where条件,或使用数据库函数now()等。
    优点:中和了statement和row的优缺点。
    26.2.2 日志的读取
    二进制日志binlog不能直接读取,需要使用mysqlbinlog工具读取。
    语法:
    # mysqlbinlog log_file
    statement格式的日志内容:
    连接数据库,设置时间戳,设置唯一、外键、非空约束,设置SQL模式,设置字符集和排序规则,记录SQL语句,设置时间戳,记录SQL语句...
    row格式的日志内容:需要增加-v或者-vv选项。
    26.2.3 日志的删除
    binlog日志占用大量磁盘空间,需要定期删除。
    删除方法如下:
    1.reset master 将原有binlog全部删除,新的binlog从000001重新开始。
    2.purge master logs to 'hostname-bin.00000x' 将00000x之前的日志全部删除。
    3.purge master logs before 'yyyy-mm-dd hh24:mi:ss' 将'yyyy-mm-dd hh24:mi:ss'时间之前的日志全部删除。
    4.设置日志过期天数参数expire_logs_days=1 将1天之前的日志全部删除。
    26.2.4 其他选项(参数)
    binlog-do-db=db_name 指定记录binlog的数据库,多个数据库时写多条语句
    binlog-ignore-db=db_name 指定不记录binlog的数据库,多个数据库时写多条语句
    sync-binlog=N 每写N次日志时将binlog从内存缓冲区刷新到磁盘上
    innodb-safe-binlog
    sql_log_bin=0 不记录binlog

    26.3 查询日志
    查询日志记录了执行的所有语句,日志内容为文本格式。
    26.3.1 日志的位置和格式
    参数:
    general_log=0|1 是否启用查询日志,general_log=默认为1启用查询日志;不设置general_log指不启用查询日志。
    general_log_file=file_name 设置查询日志的路径和文件名,默认路径为DATADIR,默认文件名host_name.log
    log_output=NONE|FILE|TABLE|FILE,TABLE
    NONE指不保存查询日志;
    FILE指将查询日志保存在文件host_name.log中(默认FILE);
    TABLE指将查询日志保存在表中,保存在表中比保存在文件中要占用更多的资源;
    FILE,TABLE指将查询日志同时保存在文件中和表中。
    sql_log_off=on|off 指在session级别控制本条SQL是否记录查询日志。
    设置参数:
    1.在my.cnf文件中设置,并重启mysql
    2.在global级别设置
    mysql> set global general_log=0;
    3.在session级别设置
    mysql> set sql_log_off=on

    26.3.2 日志的读取
    查询日志内容是文本格式,可直接读取。
    注意:查询日志记录了所有数据库操作,对于访问频繁的系统,日志对系统性能影响较大时建议关闭查询日志。

    26.4 慢查询日志
    慢查询日志记录了所有执行时间超过参数long_query_time设置值,并且扫描记录不小于参数min_examined_row_limit的所有SQL语句的日志。
    注意:
    参数long_query_time 单位:秒,默认值10秒,精度可以到微秒,如:2.999999秒;
    获得表锁的时间不算作执行时间;
    默认情况下管理语句和不使用索引的查询语句不记录慢查询日志;
    管理语句包括:alter table,analyze table,check table,create index,drop index,optimize table,repair table等;
    可以通过参数--log-slow-admin-statements启用对管理语句记录慢查询日志;
    可以通过参数--log-queries-not-using-indexes启用对不使用索引的查询语句记录慢查询日志。
    参数汇总:
    slow_query_log=0|1 : 是否开启慢查询日志,不设置默认关闭,slow_query_log=默认开启。
    log_slow_queries : 指定是否开启慢查询日志(该参数要被slow_query_log取代,做兼容性保留)
    slow_query_log_file : 指定慢查询日志的路径和文件名,默认路径为DATADIR,默认文件名host_name-slow.log。
    long_query_time : 设定慢查询的阀值,超出次设定值的SQL即被记录到慢查询日志,缺省值为10s。
    min_examined_row_limit: 查询检查返回少于该参数指定行的SQL不被记录到慢查询日志
    og-slow-admin-statements: 是否启用对管理语句记录慢查询日志
    log_queries_not_using_indexes: 是否启用对不使用索引的查询语句记录慢查询日志

    26.4.1 日志的位置和格式
    慢查询日志默认路径为DATADIR,默认文件名host_name-slow.log。
    log_output=NONE|FILE|TABLE|FILE,TABLE 也控制慢查询日志输出格式。

    26.4.2 日志的读取
    错误日志、查询日志、慢查询日志内容都是纯文本格式,可以直接读取。
    set long_query_time=2;
    set long_query_time=0.01;
    set log_output=FILE,TABLE;
    从表中查看慢查询日志
    select * from slow_log where sql_text='?';
    用mysqldumpslow工具可以对慢查询日志进行分类汇总(对同一语句进行统计):
    # mysqldumpslow host_name-slow.log
    慢查询日志可以发现有性能问题的SQL,建议开启慢查询日志。

    26.5 mysqlsla简介
    mysqlsla(Mysql statement log Analyzer)是用于日志分析的第三方工具,
    可以分析查询日志、慢查询日志、二进制日志和自定义日志。
    下载地址http://hackmysql.com/mysqlsla
    man mysqlsla 帮助命令,用于查看mysqlsla的参数
    mysqlsla --log-type general host_name.log 解析查询日志
    mysqlsla --log-type msl host_name.log 解析带微妙的查询日志
    mysqlsla --log-type slow host_name-slow.log 解析慢查询日志
    mysqlbinlog binlog-00000.x | mysqlsla --log-type binary - 解析binlog日志
    mysqlsla --log-type udl --udl-format udl.log 解析自定义格式的日志
    注意:除二进制日志外,可以省略--log-type选项,即mysqlsla file_name.log即可。
    mysqlsla --statement-filter|-sf +update file_name.log 仅显示update语句的日志
    mysqlsla --statement-filter|-sf -delete file_name.log 不显示delete语句的日志
    mysqlsla --explain|-ex file_name.log 在报表中显示执行计划
    mysqlsla --sort file_name.log 对分析结果进行排序,慢查询日志和微妙日志按总执行时间排序,其它日志按总执行次数排序
    mysqlsla --grep PATTERN 用PATTERN匹配SQL语句中的字符串,如--grep 'count' 只显示带count的SQL语句的分析结果。
    分析结果第一部分是对被分析日志的总体介绍,如:
    Auto-detected logs as general logs 自动探测到日志的类型
    109 queries total 总的查询次数
    36 unique 对SQL语句去重(将实际值抽象并过滤空格后distinct)后的查询次数
    sorted by 'c_sum'|'t_sum' 结果的排序方式是按总执行次数排序,还是按总执行时间排序
    分析结果第二部分是报告的主题,按照执行次数由大到小的顺序输出前10条SQL的统计信息,如:
    Count :16(14.68%) 该SQL的执行次数及占比
    Connection ID:2 该SQL的连接次数
    Database:test 执行该SQL的数据库
    Users: 执行该SQL的用户,如果多个用户时,按每个用户的执行次数比例显示
    Query abstract:xxx 该SQL抽象后的语句
    Query sample:xxx 该SQL带入实际参数值的样例
    可以将mysqlsla的常用配置选项写入mysqlsla配置文件~/.mysqlsla文件。
    除mysqlsla外,还有其它日志分析工具,如:myprofi、mysql-explain-slow-log、mysqllogfilter等。

    26.6 小结

  • 相关阅读:
    常见寻找OEP脱壳的方法
    Windows内核原理系列01
    HDU 1025 Constructing Roads In JGShining's Kingdom
    HDU 1024 Max Sum Plus Plus
    HDU 1003 Max Sum
    HDU 1019 Least Common Multiple
    HDU 1018 Big Number
    HDU 1014 Uniform Generator
    HDU 1012 u Calculate e
    HDU 1005 Number Sequence
  • 原文地址:https://www.cnblogs.com/BradMiller/p/10246410.html
Copyright © 2020-2023  润新知