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 从入门到精通》

  • 相关阅读:
    Net Remoting(应用程序域)
    C# 方便的复制/比较物件内数据的方法(Object Copy / Compare)
    c# 序列化
    Windows Phone 7 开发日志(初试一、随便研究)
    关于Windows Phone 7推广策略的失误
    vb 托盘图标
    vb code中调用exe文件,当关闭的时候直接关闭文件.
    调用INI文件
    使用SQL的JOB调用DTS定制任务!
    给Word设置目录
  • 原文地址:https://www.cnblogs.com/Hermioner/p/10384818.html
Copyright © 2011-2022 走看看