学习目标

  • 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]节点添加以下配置信息:

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

  

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

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

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

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

例如:

  1. 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恢复数据语法格式:

  1. 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在运行时,删除错误日志文件不会自动创建新的日志文件,需要在服务器端执行:

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

  

或者在mysql中执行

  1. FLUSH LOGS

  

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

通用查询日志

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

启动和设置通用查询日志

5.7之前的版本

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

  1. log[=path/[filename]]

例如:

  1. ; 开启通用查询日志
  2. log

  

5.7版本

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

  

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

查看通用查询日志

使用记事本查看

删除和重建通用查询日志

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

重建通用查询日志命令:

  1. mysqladmin -u root -proot -flush logs general

  

慢查询日志

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

启动和设置慢查询日志

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

5.6和之前版本:

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

  

5.7版本:

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

  

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

查看慢查询日志

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

删除慢查询日志

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

  1. # 系统命令
  2. mysqladmin -u User -pPassword flush-logs slow
  3.  
  4. # mysql执行语句
  5. FLUSH LOGS;

  

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

  1. [mysqld]
  2. port = 3306
  3. ;指定数据库的编码格式
  4. character-set-server=utf8
  5. ;启动事件
  6. ;event_scheduler=ON
  7.  
  8. ; 二进制日志设置开始
  9. ; 开启二进制日志
  10. log-bin="d:/mysqllogs/binlog"
  11. ; 自动清除10天过期日志。MySQL服务重启或者日志刷新时候将被删除。
  12. expire-logs-days=10
  13. ; 单个日志文件大小
  14. max_binlog_size=100M
  15. ;二进制日志设置结束
  16.  
  17. ; 错误日志的设置
  18. log-error="d:/mysqllogs/errlog"
  19.  
  20. ; 开启通用查询日志
  21. general-log=1
  22. general_log_file="d:/mysqllogs/genlog"
  23.  
  24. ; 开启慢查询日志
  25. slow_query_log=ON
  26. ; 设置慢查询日志存储位置
  27. slow_query_log_file='d:/mysqllogs/slowlog'
  28. ; 设置超时,默认为10
  29. 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. 删除慢查询日志文件

MySQL-07 日志管理的更多相关文章

  1. MySQl Study学习之--MySQl二进制日志管理

    MySQl Study学习之--MySQl二进制日志管理 MySQL二进制日志(Binary Log)   a.它包括的内容及作用例如以下:     包括了全部更新了数据或者已经潜在更新了数据(比方没 ...

  2. MySQL InnoDB 日志管理机制中的MTR和日志刷盘

    1.MTR(mini-transaction) 在MySQL的 InnoDB日志管理机制中,有一个很重要的概念就是MTR.MTR是InnoDB存储擎中一个很重要的用来保证物理写的完整性和持久性的机制. ...

  3. mysql的日志管理

    日志操作是数据库维护中最重要的手段之一,日志文件会记录MySQL服务器的各种信息,所以当MySQL服务器遭到意外损坏时,不仅可以通过日志文件来查看出错的原因,而且还可以通过日志文件进行数据恢复. MY ...

  4. mysql数据库-日志管理

    MySQL 支持丰富的日志类型 事务日志:transaction log 事务日志的写入类型为"追加",因此其操作为"顺序IO":通常也被称为:预写式日志 wr ...

  5. mysql慢日志管理

    一.日志切割 原理: 1.cp一个慢日志备份 2.清空原理的慢日志 3.写成脚本,每天一切,这样就ok啦 二.查找日志中的慢日志 1.做了日志切割(慢日志文件就小了) 2.查找某个时间的慢日志 日志时 ...

  6. 28.MysQL的日志管理及备份与恢复

    MySQL 索引.事务与存储引擎 目录 MySQL 索引.事务与存储引擎 MySQL 索引 索引的概念 索引的作用及副作用 索引的作用 索引的副作用 创建索引的原则依据 索引的分类和创建 普通索引 唯 ...

  7. MySQL日志管理

    MySQL日志管理 2013年09月26日 ⁄ MySQL ⁄ 共 14266字 ⁄ 评论数 ⁄ 被围观 , views+ 一.日志类型: MySQL有几个不同的日志文件,可以帮助你找出mysqld内 ...

  8. MySQL 日志管理详解

    大纲 一.日志分类 二.日志详解 注:MySQL版本,Mysql-5.5.32(不同版本的mysql变量有所不同) 一.日志分类 错误日志 查询日志 慢查询日志 二进制日志 中继日志 事务日志 滚动日 ...

  9. 项目实战6—Mysql实现企业级日志管理、备份与恢复实战

    Mysql实现企业级日志管理.备份与恢复实战 环境背景:随着业务的发展,公司业务和规模不断扩大,网站积累了大量的用户信息和数据,对于一家互联网公司来说,用户和业务数据是根基.一旦公司的数据错乱或者丢失 ...

  10. mysql 开发进阶篇系列 33 工具篇(mysqlbinlog日志管理工具)

    一.概述 由于服务器生成的二进制日志文件以二进制格式保存,所以如果要想检查这些文件的文本格式,就会用到mysqlbinlog日志管理工具. mysqlbinlog的语法如下: mysqlbinlog ...

随机推荐

  1. 通过配置Mysql参数提高写入速度(整理)

    1) innodb_buffer_pool_size 如果用Innodb,那么这是一个重要变量.相对于MyISAM来说,Innodb对于buffer size更敏感.MySIAM可能对于大数据量使用默 ...

  2. vmware实现与windows下的共享文件

    1 首先你得先设置一下windows下得共享 比如是准备共享D盘 那么右击 ----->属性------->高级共享勾上就OK勒 2那么vmware怎么设置呢? 打开vmware-> ...

  3. NYOJ5——Binary String Matching

    Binary String Matching 时间限制:3000 ms  |  内存限制:65535 KB 难度:3  描述:Given two strings A and B, whose alph ...

  4. firefly安装步骤

    本来公司一个网游服务器端选定了pomelo框架,后来出了个Firefly,为做一个对比,决定研究一下Firefly.看了一下Firefly,感觉头大,python的,本人python小白,只好慢慢折腾 ...

  5. python 基本类型的创建方法

    1.int class int(object) | int(x=0) -> integer | int(x, base=10) -> integer | | Convert a numbe ...

  6. c++中的虚函数是什么东西?

    #include <iostream> #include<string> #include<vector> using namespace std; class A ...

  7. codeforces 629C Famil Door and Brackets (dp + 枚举)

    题目链接: codeforces 629C Famil Door and Brackets 题目描述: 给出完整的括号序列长度n,现在给出一个序列s长度为m.枚举串p,q,使得p+s+q是合法的括号串 ...

  8. 洛谷 P4219 [BJOI2014]大融合

    查询,就相当于先删去这条边,然后查询边的两个端点所在连通块大小,乘起来得到答案,然后再把边加回去 可以用线段树分治做 #pragma GCC optimize("Ofast") # ...

  9. 使用PlSQLDeveloper工具查询Oracle会话数

    PlSQLDeveloper工具提供了会话管理功能. 能够查询会话内容.杀死会话.查看会话SQL等操作. 常用的会话查询SQL如下: -- 查询所有会话 select * from v$session ...

  10. subline应用之常用插件

    汉化插件:ChineseLocalzations IMESupport插件:解决软件输入法跟随问题 SublimeREPL插件:可以用于运行和调试一些需要交互的程序如python SublimeCod ...