• MySQL-07 日志管理


    学习目标

    • MySQL日志
    • 二进制日志
    • 错误日志
    • 查询通用日志
    • 慢查询日志

    MySQL日志

    MySQL日志分为四类,说明如下:

    • 错误日志:记录MySQL服务的启动、运行或者停止时出现的问题。
    • 查询日志:记录客户端连接和执行的语句。
    • 二进制日志:记录所有更改数据的语句,可以用于数据复制。
    • 慢查询日志:记录所有执行时间超过long_query_time的所有查询或者不使用索引的查询。

    刷新日志的命令:FLUSH LOGS、MySQLAdmin flush-logs、MySQLAdmin refresh。

    启用日志功能会降低MySQL数据库的性能和占用磁盘空间。

    二进制日志

    二进制日志是一个二进制文件,主要用于记录修改数据或有可能引起数据变更(例如没有匹配删除条件的DELETE语句)的MySQL语句,以事务安全的方式包含更新日志中可用的所有信息。

    二进制日志中记录了对MySQL数据库执行更改的所有操作,并且记录了语句发生时间、执行时长、操作数据等其它额外信息,但是它不记录SELECT、SHOW等那些不修改数据的SQL语句。如果记录所有语句,使用查询日志。

    二进制日志主要要用于数据库恢复和主从复制,以及审计(audit)操作。

    启动和设置二进制日志

    在my.ini配置文件的[mysqld]节点添加以下配置信息:

    [mysqld]
    port = 3306
    
    ; 服务端使用的字符集默认为8比特编码的latin1字符集
    character-set-server=utf8
    ; 创建新表时将使用的默认存储引擎
    default-storage-engine=INNODB
    
    ; 二进制日志设置开始
    ; 开启二进制日志
    log-bin
    ; 自动清除10天过期日志。MySQL服务重启或者日志刷新时候将被删除。
    expire-logs-days=10
    ; 单个日志文件大小
    max_binlog_size=100M
    ;二进制日志设置结束
    

      

    添加完成后,关闭并重启MySQL服务进程,即可打开和查看二进制日志。

    确认二进制日志已经打开:

    在mysql的data数据目录下,生成以主机名称作为文件名的日志文件:

    如果需要修改二进制日志文件的存储位置和名称,则修改my.ini配置文件中log-bin的值:

    例如:

    log-bin="D:/logs/binlog"
    

      

    重启mysql服务后,日志将保存在“D:/logs”目录中,并且文件名为“binlog”。

    查看二进制日志

    MySQL服务每重启一次(或者执行SQL命令FLUSH LOGS),以后缀名为.00000*的文件会增加一个;或者日志文件的的大小超过max_bin_log设置的大小(默认1G),也会重新创建一个新文件。

    示例1:在MySQL中查看日志文件个数和文件名:

    示例2:查看二进制日志

    在命令行中,使用mysqlbinlog命令工具查看。

    mysqlbinlog需要添加参数“-v”,否则无法看到SQL语句。

     

    二进制日志格式

    • 基于行的格式row

    由于ROW格式记录的日志量巨大, 在MySQL 5.6以后, 官方增加了binlog_row_image参数改善其记录方式。

    value值:

    FULL为默认值,意思是记录一行纪录里面的所有内容,无论该列是否被修改。

    MINIMAL仅记录被修改的列,这样就可以大大减少记录量。

    NOBLOB与FULL类型,但是如果没有修改BLOB或TEXT类型的列,就不会记录该大数据类型的列。

     

    • 基于段的格式statement

    优点:记录每个事件所执行的SQL语句, 故不需要记录每一行的具体变化, 所以日志记录量相对较少, 节约磁盘IO与网络IO(如果只对一条记录修改或者插入,ROW格式的日志量有可能少于STATEMENT格式)。

    缺点:为了确保这些SQL语句能在从库中正确地执行, 所以要记录上下文信息, 以保证重放时的行为一致. 但如果使用UUID()这类非确定性函数, 可能会造成主从的数据不一致.

    格式设置:

    删除二进制日志

    示例1:删除全部二进制文件

    示例2:删除创建时间比RASK-PC-bin.000005的日志文件

    删除前日志文件:

    或者:

    执行删除部分日志命令:

    暂时启动和停止二进制日志功能

    启动

    停止

     使用二进制日志恢复数据库

    mysqlbinlog工具可以从指定的时间点开始恢复数据。

    mysqlbinlog恢复数据语法格式:

    mysqlbinlog [option] filename | mysql -uUser -pPassword
    

      

    option可选项:

    --start-datetime:指定恢复数据库的起始时间点。

    --stop-datetime:指定恢复数据库的结束时间点。

    --start-position:恢复的开始位置(日志中的位置)。

    --stop-position:恢复的结束位置。

    示例1:全部恢复

    示例2:恢复到2018年6月17日10:30:00时的状态

    错误日志

     错误日志默认位于data目录下,文件名为:hostname.err。例如:

    如果需要修改默认文件存储路径和文件名,需要在my.ini配置文件的[mysqld]节点添加以下信息:

    log-error=[path/[filename]]

    注意:mysql如果无法创建path,需要手动创建。

    查看日志文件

    直接使用文本工具查看。

    删除日志文件

    可以直接删除文本日志文件。MySQL在运行时,删除错误日志文件不会自动创建新的日志文件,需要在服务器端执行:

    mysqladmin -u root -pPassword flush-logs [日志类型]
    日志类型: binary, engine, error,general, relay, slow

      

    或者在mysql中执行

    FLUSH LOGS
    

      

    MySQL重启会重新创建日志文件。

    通用查询日志

    通用查询日志记录了MySQL的所有用户操作,包括启动和关闭服务、执行查询和更新语句。

    启动和设置通用查询日志

    5.7之前的版本

    在my.ini配置文件[mysqld]节点下添加:

    log[=path/[filename]]
    

    例如:

    ; 开启通用查询日志
    log
    

      

    5.7版本

    ; 开启通用查询日志
    general-log=1
    general_log_file="D:/logs/genlog.log"
    

      

    如果不指定general_log_file,则查询日志保存在data目录下,文件名:hostname.log。

    查看通用查询日志

    使用记事本查看

     删除和重建通用查询日志

    通过my.ini配置文件找到查询日志存储位置,直接在文件管理系统中删除。

    重建通用查询日志命令:

    mysqladmin -u root -proot  -flush logs general
    

      

    慢查询日志

     慢查询日志记录查询时长超过指定时间的日志。通过慢查询日志,可以找出执行时间较长、执行效率较低的语句,然后针对其进行优化。

    启动和设置慢查询日志

    在my.ini配置文件[mysqld]节点下添加慢查询日志配置:

    5.6和之前版本:

    ; 开启慢查询日志
    log-slow-queries
    ; 设置查询时长阀值为20秒(默认10秒)
    long_query_time=20
    

      

    5.7版本:

    slow_query_log=ON
    ; 设置慢查询日志存储位置
    slow_query_log_file='d:/logs/slow.log'
    ; 设置超时,默认为10秒
    long_query_time=20
    

      

    slow_query_log_file不进行设置,则日志存储在data目录下,默认文件名为hostname-slow.log,例如:

    查看慢查询日志

    使用文本工具直接查看日志文件即可。

    删除慢查询日志

    直接使用文件系统删除。删除后无法自动创建,需要执行mysqladmin命令或者登陆到mysql服务器执行刷新日志命令:

    # 系统命令
    mysqladmin -u User -pPassword flush-logs slow
    
    # mysql执行语句
    FLUSH LOGS;
    

      

    日志设置参考代码(mysql5.7.14) 

    [mysqld]
    port = 3306
    ;指定数据库的编码格式
    character-set-server=utf8
    ;启动事件
    ;event_scheduler=ON
    
    ; 二进制日志设置开始
    ; 开启二进制日志
    log-bin="d:/mysqllogs/binlog"
    ; 自动清除10天过期日志。MySQL服务重启或者日志刷新时候将被删除。
    expire-logs-days=10
    ; 单个日志文件大小
    max_binlog_size=100M
    ;二进制日志设置结束
    
    ; 错误日志的设置
    log-error="d:/mysqllogs/errlog"
    
    
    ; 开启通用查询日志
    general-log=1
    general_log_file="d:/mysqllogs/genlog"
    
    ; 开启慢查询日志
    slow_query_log=ON
    ; 设置慢查询日志存储位置
    slow_query_log_file='d:/mysqllogs/slowlog'
    ; 设置超时,默认为10秒
    long_query_time=20
    

      

    综合练习

    练习一:二进制日志综合练习:

    1. 启动二进制日志,指定二进制日志名称为binlog,日志存储位置为D:/logs
    2. 验证重启mysql和FLUSH LOGS执行语句对二进制日志的影响
    3. 使用mysqlbinlog命令查看二进制日志文件
    4. 使用二进制日志文件恢复数据:创建测试表T1(id,name),向数据表插入两条记录,查看日志文件,找出日志文件记录的SQL语句;删除T1表,使用mysqlbinlog命令恢复T1表
    5. 删除二进制日志文件。暂停和启动二进制日志文件。

    练习二:错误日志综合练习

    1. 设置和启动错误日志文件,指定错误日志文件名称为errlog,日志存储位置为D:/logs
    2. 使用记事本查看错误日志文件
    3. 删除错误日志文件
    4. 重新创建日志文件

    练习三:通用查询日志综合练习

    1. 设置和启动通用查询日志文件,指定通用查询日志文件名称为general_query_log,日志存储位置为D:/logs
    2. 查看通用查询日志
    3. 删除通用查询日志

    练习四:慢查询日志综合练习

    1. 设置和启动慢查询日志文件,指定慢查询日志文件名称为slow_query_log,日志存储位置为D:/logs
    2. 查看慢查询日志文件
    3. 删除慢查询日志文件


    本博客文章未经许可,禁止转载和商业用途!

    如有疑问,请联系: 2083967667@qq.com


  • 相关阅读:
    BZOJ3669
    HDU3726
    BZOJ3282
    BZOJ2843
    Link/cut Tree
    Codeforces396A
    LOJ6277~6285 数列分块入门
    Codeforces446C
    Codeforces475D
    Codeforces103D
  • 原文地址:https://www.cnblogs.com/rask/p/9191874.html
Copyright © 2020-2023  润新知