zoukankan      html  css  js  c++  java
  • MySql学习15----MySql日志

    MySql日志记录了MySql数据库日常操作和错误信息。MySql有不同类型的日志文件(各自存储了不同类型的日志),从日志当中可以查询到MySql数据库的运行情况、用户操作、错误信息等,可以为MySql管理和优化提供必要的信息。

    一. 日志简介

    MySql日志主要分为4类,使用这些日志文件,可以查看MySql内部发生的事情。

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

    默认情况下,所有日志创建于MySql数据目录中。通过刷新日志,可以强制MySql关闭和重新打开日志文件。当执行一个Flush logs语句或执行MySqladmin flush-logs或MySqladmin refresh时,将刷新日志。

    二. 二进制日志

    使用二进制日志的主要目的是最大可能地恢复数据库,因为二进制日志包含备份后进行的所有更新。

    二进制日志主要记录MySql数据库的变化。二进制日志以一种有效的格式,并且是事务安全的方式包含更新日志中可用的所有信息。二进制日志包含了所有更新了数据或者已经潜在更新了数据(例如,没有匹配任何行的一个DELETE)的语句。语句以“事件”的形式保存,描述数据更改。

    2.1 启动和设置二进制日志

    默认情况下,二进制日志是关闭的,可以通过修改MySQL的配置文件来启动和设置二进制日志。

    C:ProgramDataMySQLMySQL Server 5.7my.ini中有下面几个参数设置是关于二进制日志的:

    举例:直接打开C:ProgramDataMySQLMySQL Server 5.7my.in的文件,取消Log-bin前面的注释,并添加expire_logs_days和max_binlog_size两个字段

    修改了以后,不会立即生效的,需要重启MySql服务器(note,不是指的exit命令退出的客户端,而是进程中的MySql服务)。究竟生效没有,可以通过show variables变量来查看具体的值是否修改成功了。

    关闭和重新启动MySql服务之后,新的二进制文件将出现在C:ProgramDataMySQLMySQL Server 5.7Data目录下,并自动生成.0000001和.index两个文件,文件名称默认为主机名称。当然,可以自定义日志路径,就需需要log-bin目录中指定二进制日志存放路径:

    log-bin="D:/mylogs"
    这样,就会在mlogs路径下生成对应的二进制文件 名称为mylogs.0000001和mylogs.index

    note: 数据库文件最好不要和日志文件存放在同一个磁盘上,这样,当数据库文件所在的磁盘出现故障时,可以使用日志文件恢复数据。

    2.2 查看二进制日志

    MySql二进制日志存储了所有的变更信息,MySql二进制日志时经常用到的。当MySql创建二进制日志文件时,首先创建一个以“filename”为名称,以“.index”为后缀的文件;再创建一个以“filename”为名称,以“.000001”为后缀的文件。当MySql服务重新启动一次,以“.000001”为后缀的文件会增加一个,并且后缀名加1递增;如果日志长度超过了max_binlog_size的上限也会创建一个新的日志文件。

    举例:使用show binary logs查看二进制文件个数及文件名

    mysql> show binary logs;
    +---------------------+-----------+
    | Log_name            | File_size |
    +---------------------+-----------+
    | WL12345-bin.000001 |       154 |
    +---------------------+-----------+
    1 row in set (0.00 sec)

    可以看到,当前只有一个二进制文件。日志文件的个数与MySql服务启动的次数相同。

    举例:假设Mytest中有四个表,删除三个表,查看对应的日志内容。使用mysqlbinlog查看二进制日志的内容

     1 mysql> use mytest;
     2 Database changed
     3 mysql> show tables;
     4 +------------------+
     5 | Tables_in_mytest |
     6 +------------------+
     7 | stu              |
     8 | stu2             |
     9 | stu3             |
    10 | user             |
    11 +------------------+
    12 4 rows in set (0.00 sec)
    13 
    14 mysql> drop table stu2,stu3,user;
    15 Query OK, 0 rows affected (0.09 sec)
    View Code
    C:UsersHermioner>cd C:ProgramDataMySQLMySQL Server 5.7Data
    
    C:ProgramDataMySQLMySQL Server 5.7Data>mysqlbinlog WL12345-bin.000001

    具体的结果中,将会出现DROP语句,记录了刚刚的删除操作

    DROP TABLE `stu2`,`stu3`,`user` /* generated by server */
    /*!*/;
    # at 354
    #190215 16:38:25 server id 1 end_log_pos 377 CRC32 0xaff15f2d Stop

    Note: 即使现在更新了数据,日志名字个数都不改变,只有重启了MySql服务器,才会增加日志个数。假设现在重启了,查看日志个数和名字:

    mysql> show binary logs;
    +---------------------+-----------+
    | Log_name            | File_size |
    +---------------------+-----------+
    | WL12345-bin.000001 |       377 |
    | WL12345-bin.000002 |       154 |
    +---------------------+-----------+
    2 rows in set (0.00 sec)

    2.3 删除二进制日志

    MySql的二进制文件可以配置自动删除,比如之前配置的过期删除时间,同时MySql也提供了安全的手动删除二进制日志文件的方法:RESET MASTER删除所有的二进制日志文件;PURGE MASTER LOGS只删除部分二进制日志文件。

    (1)使用RESET MASTER语句删除所有二进制日志文件

               语法:

    RESET MASTER;

     说明:执行完该语句之后,所有二进制日志将被删除,MySql会重新创建二进制日志文件,新的日志文件扩展名将重新从000001开始编号。

    (2)使用PURGE MASTER LOGS语句删除指定日志文件

              语法:

    PURGE {MASTER | BINARY} LOGS TO 'log_name'
    PURGE {MASTER | BINARY} LOGS BEFORE 'date'

    说明:第一种方法指定文件名,执行该命令将删除文件名编号比指定文件名编号小的所有日志文件。第二种方法指定日期,执行该命令将删除指定日期以前的所有日志文件。

    举例:删除创建时间比binlog.000003早的所有日志文件

    举例:删除早于2016年1月30日的所有日志

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

    要想从二进制日志恢复数据,需要知道当前二进制日志文件的路径和文件名。一般可以从配置文件my.ini中找到路径。

    语法:

    位置和结束位置。

    note: 上面的position代表日志文件中的具体start或者stop的行数位置

    2.5 暂时停止二进制日志功能

    三. 错误日志

    3.1 启动和设置错误日志

    3.2 查看错误日志

    3.3 删除错误日志

    四. 通用查询日志

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

    4.1 启动和设置通用查询日志

    默认时没开启的,还是通过修改my.ini:

    4.2 查看通用查询日志

    5.3 删除通用查询日志

    五. 慢查询日志

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

    5.1 启动和设置慢查询日志

    5.2 查看慢查询日志

    5.3 删除慢查询日志

    参考文献:

    《MySql5.7 从入门到精通》

  • 相关阅读:
    Codeforces Round #344 (Div. 2) C. Report 其他
    Codeforces Round #344 (Div. 2) B. Print Check 水题
    Codeforces Round #344 (Div. 2) A. Interview 水题
    8VC Venture Cup 2016
    CDOJ 1280 772002画马尾 每周一题 div1 矩阵快速幂 中二版
    CDOJ 1280 772002画马尾 每周一题 div1 矩阵快速幂
    CDOJ 1279 班委选举 每周一题 div2 暴力
    每周算法讲堂 快速幂
    8VC Venture Cup 2016
    Educational Codeforces Round 9 F. Magic Matrix 最小生成树
  • 原文地址:https://www.cnblogs.com/Hermioner/p/10384818.html
Copyright © 2011-2022 走看看