当前位置: 首页 > news >正文

简单聊聊MySQL中的六种日志

(一)概述

MySQL中存在着以下几种日志:重写日志(redo log)、回滚日志(undo log)、二进制日志(bin log)、错误日志(error log)、慢查询日志(slow query log)、一般查询日志(general log)。

MySQL中的数据变化会体现在上面这些日志中,比如事务操作会体现在redo log、undo log以及bin log中,数据的增删改查会体现在 binlog 中。本章是对MySQL日志文件的概念及基本使用介绍,不涉及底层内容。针对开发人员而言,这几种日志中最有可能使用到的是慢查询日志。

(二)redo log

redo log是一种基于磁盘的数据结构,用来在MySQL宕机情况下将不完整的事务执行数据纠正,redo日志记录事务执行后的状态。

当事务开始后,redo log就开始产生,并且随着事务的执行不断写入redo log file中。redo log file中记录了xxx页做了xx修改的信息,我们都知道数据库的更新操作会在内存中先执行,最后刷入磁盘。

redo log就是为了恢复更新了内存但是由于宕机等原因没有刷入磁盘中的那部分数据。

(三)undo log

undo log主要用来回滚到某一个版本,是一种逻辑日志。undo log记录的是修改之前的数据,比如:当delete一条记录时,undolog中会记录一条对应的insert记录,从而保证能恢复到数据修改之前。在执行事务回滚的时候,就可以通过undo log中的记录内容并以此进行回滚。

undo log还可以提供多版本并发控制下的读取(MVCC)。

(四)bin log

MySQL的bin log日志是用来记录MySQL中增删改时的记录日志。简单来讲,就是当你的一条sql操作对数据库中的内容进行了更新,就会增加一条bin log日志。查询操作不会记录到bin log中。bin log最大的用处就是进行主从复制,以及数据库的恢复。

通过下面的命令可以查看是否开启binlog日志

show VARIABLES like '%log_bin%'

开启binlog的方式如下:

log-bin=mysql-bin
server-id=1
binlog_format=ROW

其中log-bin指定日志文件的名称,默认会放到数据库目录下,可通过以下命令查看

show VARIABLES like '%datadir%'

(五)error log

error log主要记录MySQL在启动、关闭或者运行过程中的错误信息,在MySQL的配置文件my.cnf中,可以通过log-error=/var/log/mysqld.log 执行mysql错误日志的位置。

通过MySQL的命令

 show variables like "%log_error%";

也可以获取到错误日志的位置。

(六)slow query log

慢查询日志用来记录执行时间超过指定阈值的SQL语句,慢查询日志往往用于优化生产环境的SQL语句。可以通过以下语句查看慢查询日志是否开启以及日志的位置:

 show variables like "%slow_query%";

慢查询日志的常用配置参数如下:

slow_query_log=1  #是否开启慢查询日志,0关闭,1开启
slow_query_log_file=/usr/local/mysql/mysql-8.0.20/data/slow-log.log  #慢查询日志地址(5.6及以上版本)
long_query_time=1 #慢查询日志阈值,指超过阈值时间的SQL会被记录
log_queries_not_using_indexes  #表示未走索引的SQL也会被记录

分析慢查询日志一般会用专门的日志分析工具。找出慢SQL后可以通过explain关键字进行SQL分析,找出慢的原因。

(七)general log

general log 记录了客户端连接信息以及执行的SQL语句信息,通过MySQL的命令

show variables like '%general_log%';

可以查看general log是否开启以及日志的位置。

general log 可通过配置文件启动,配置参数如下:

general_log = on
general_log_file = /usr/local/mysql/mysql-8.0.20/data/hecs-78422.log

普通查询日志会记录增删改查的信息,因此一般是关闭的。

相关文章:

  • 网络 基于TCP协议socket编程
  • 最实用的设计模式:策略模式的快速理解
  • Spark算子实战Java版,学到了
  • 精益 React 学习指南 (Lean React)- 1.5 React 与 DOM
  • 【设计模式】快速理解装饰者模式,及其在JDK源码中的应用
  • 你真的了解Maven吗?
  • 【转】Xcode常用快捷键与技巧分享
  • 【设计模式】快速理解观察者模式,原来它还有这么多其他名字
  • linux实际应用小技巧
  • 时间类有多复杂,JDK竟设计了三版
  • AOP之PostSharp5-LocationInterceptionAspect
  • 如何快速学习一门新技术
  • 模拟实现部分库函数(strcpy,strcmp,strcat,strstr,memcpy,memmove,memset)
  • 组成原理(一):计算机是如何组成的
  • JDK9相比于JDK8,究竟变强了多少
  • 分享的文章《人生如棋》
  • 4个实用的微服务测试策略
  • bearychat的java client
  • CentOS 7 防火墙操作
  • Hibernate最全面试题
  • HTTP--网络协议分层,http历史(二)
  • javascript 总结(常用工具类的封装)
  • java架构面试锦集:开源框架+并发+数据结构+大企必备面试题
  • PHP 小技巧
  • Python实现BT种子转化为磁力链接【实战】
  • React-flux杂记
  • spring security oauth2 password授权模式
  • SQLServer插入数据
  • Vim Clutch | 面向脚踏板编程……
  • vue-router 实现分析
  • 理解IaaS, PaaS, SaaS等云模型 (Cloud Models)
  • 前端每日实战 2018 年 7 月份项目汇总(共 29 个项目)
  • 如何抓住下一波零售风口?看RPA玩转零售自动化
  • 深入浅出webpack学习(1)--核心概念
  • 使用Tinker来调试Laravel应用程序的数据以及使用Tinker一些总结
  • 想晋级高级工程师只知道表面是不够的!Git内部原理介绍
  • 没有任何编程基础可以直接学习python语言吗?学会后能够做什么? ...
  • ​flutter 代码混淆
  • ​业务双活的数据切换思路设计(下)
  • (DFS + 剪枝)【洛谷P1731】 [NOI1999] 生日蛋糕
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (免费领源码)Python#MySQL图书馆管理系统071718-计算机毕业设计项目选题推荐
  • (欧拉)openEuler系统添加网卡文件配置流程、(欧拉)openEuler系统手动配置ipv6地址流程、(欧拉)openEuler系统网络管理说明
  • (一)基于IDEA的JAVA基础10
  • .net core 客户端缓存、服务器端响应缓存、服务器内存缓存
  • .net MVC中使用angularJs刷新页面数据列表
  • .net 流——流的类型体系简单介绍
  • .NET/C# 使窗口永不激活(No Activate 永不获得焦点)
  • .Net程序猿乐Android发展---(10)框架布局FrameLayout
  • .Net开发笔记(二十)创建一个需要授权的第三方组件
  • .net流程开发平台的一些难点(1)
  • .NET轻量级ORM组件Dapper葵花宝典
  • .NET微信公众号开发-2.0创建自定义菜单
  • .NET业务框架的构建
  • /proc/vmstat 详解