目录

1.MySQL日志文件系统的组成

2.错误日志

3.InnoDB中的日志

4- 慢查询日志

5.二进制日志

总结


同大多数关系型数据库一样,日志文件是MySQL数据库的重要组成部分。MySQL有几种不同的日志文件,通常包括错误日志文件,二进制日志,通用日志,慢查询日志,等等。这些日志可以帮助我们定位mysqld内部发生的事件,数据库性能故障,记录数据的变更历史,用户恢复数据库等等。本文主要描述错误日志文件。

1.MySQL日志文件系统的组成

a、错误日志:记录启动、运行或停止mysqld时出现的问题。 b、通用日志:记录建立的客户端连接和执行的语句。 c、更新日志:记录更改数据的语句。该日志在MySQL 5.1中已不再使用。 d、二进制日志:记录所有更改数据的语句。还用于复制。 e、慢查询日志:记录所有执行时间超过long_query_time秒的所有查询或不使用索引的查询。 f、Innodb日志:innodb redo log 和undo log

缺省情况下,所有日志创建于mysqld数据目录中。 可以通过刷新日志,来强制mysqld来关闭和重新打开日志文件(或者在某些情况下切换到一个新的日志)。 当你执行一个FLUSH LOGS语句或执行mysqladmin flush-logs或mysqladmin refresh时,则日志被老化。 对于存在MySQL复制的情形下,从复制服务器将维护更多日志文件,被称为接替日志。

2.错误日志

错误日志是一个文本文件。 错误日志记录了MySQL Server每次启动和关闭的详细信息以及运行过程中所有较为严重的警告和错误信息。 可以用--log-error[=file_name]选项来开启mysql错误日志,该选项指定mysqld保存错误日志文件的位置。 对于指定--log-error[=file_name]选项而未给定file_name值,mysqld使用错误日志名host_name.err 并在数据目录中写入日志文件。 在mysqld正在写入错误日志到文件时,执行FLUSH LOGS 或者mysqladmin flush-logs时,服务器将关闭并重新打开日志文件。 建议在flush之前手动重命名错误日志文件,之后mysql服务将使用原始文件名打开一个新文件。 以下为错误日志备份方法: shell> mv host_name.err host_name.err-old shell> mysqladmin flush-logs shell> mv host_name.err-old backup-directory

3.InnoDB中的日志

MySQL数据库InnoDB存储引擎Log漫游

1 – Undo Log

Undo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版本并发控制(简称:MVCC)。

  • 事务的原子性(Atomicity) 事务中的所有操作,要么全部完成,要么不做任何操作,不能只做部分操作。如果在执行的过程中发生 了错误,要回滚(Rollback)到事务开始前的状态,就像这个事务从来没有执行过。

  • 原理 Undo Log的原理很简单,为了满足事务的原子性,在操作任何数据之前,首先将数据备份到一个地方 (这个存储数据备份的地方称为Undo Log)。然后进行数据的修改。如果出现了错误或者用户执行了 ROLLBACK语句,系统可以利用Undo Log中的备份将数据恢复到事务开始之前的状态。

除了可以保证事务的原子性,Undo Log也可以用来辅助完成事务的持久化

  • 事务的持久性(Durability) 事务一旦完成,该事务对数据库所做的所有修改都会持久的保存到数据库中。为了保证持久性,数据库 系统会将修改后的数据完全的记录到持久的存储上。

  • 用Undo Log实现原子性和持久化的事务的简化过程 假设有A、B两个数据,值分别为1,2。 A.事务开始. B.记录A=1到undo log. C.修改A=3. D.记录B=2到undo log. E.修改B=4. F.将undo log写到磁盘。 G.将数据写到磁盘。 H.事务提交 这里有一个隐含的前提条件:‘数据都是先读到内存中,然后修改内存中的数据,最后将数据写回磁盘’。

    之所以能同时保证原子性和持久化,是因为以下特点: A. 更新数据前记录Undo log。 B. 为了保证持久性,必须将数据在事务提交前写到磁盘。只要事务成功提交,数据必然已经持久化。 C. Undo log必须先于数据持久化到磁盘。如果在G,H之间系统崩溃,undo log是完整的, 可以用来回滚事务。 D. 如果在A-F之间系统崩溃,因为数据没有持久化到磁盘。所以磁盘上的数据还是保持在事务开始前的状态。

缺陷:每个事务提交前将数据和Undo Log写入磁盘,这样会导致大量的磁盘IO,因此性能很低。

如果能够将数据缓存一段时间,就能减少IO提高性能。但是这样就会丧失事务的持久性。因此引入了另外一 种机制来实现持久化,即Redo Log.

2 – Redo Log

  • 原理 和Undo Log相反,Redo Log记录的是新数据的备份。在事务提交前,只要将Redo Log持久化即可, 不需要将数据持久化。当系统崩溃时,虽然数据没有持久化,但是Redo Log已经持久化。系统可以根据 Redo Log的内容,将所有数据恢复到最新的状态。

  • Undo + Redo事务的简化过程 假设有A、B两个数据,值分别为1,2. A.事务开始. B.记录A=1到undo log. C.修改A=3. D.记录A=3到redo log. E.记录B=2到undo log. F.修改B=4. G.记录B=4到redo log. H.将redo log写入磁盘。 I.事务提交

    undo log 保存的是修改前的数据,并且保存到内存中,回滚的时候在读取里面的内容(从而实现了原子性),redolog保存的是修改后的数据(对新数据的备份,同时也会将redo log备份),在事务提交写入到磁盘,从而保证了持久性

4- 慢查询日志

概述   数据库查询快慢是影响项目性能的一大因素,对于数据库,我们除了要优化 SQL,更重要的是得先找到需要优化的 SQL。如何找到低效的 SQL 是写这篇文章的主要目的。

  MySQL 数据库有一个“慢查询日志”功能,用来记录查询时间超过某个设定值的SQL,这将极大程度帮助我们快速定位到问题所在,以便对症下药。至于查询时间的多少才算慢,每个项目、业务都有不同的要求,传统企业的软件允许查询时间高于某个值,但是把这个标准放在互联网项目或者访问量大的网站上,估计就是一个bug,甚至可能升级为一个功能性缺陷。

  为避免误导读者,特申明本文的讨论限制在 Win 64位 + MySQL 5.6 范围内。其他平台或数据库种类及版本,我没有尝试过,不做赘述。

设置日志功能 关于慢查询日志,主要涉及到下面几个参数:

slow_query_log :是否开启慢查询日志功能(必填) long_query_time :超过设定值,将被视作慢查询,并记录至慢查询日志文件中(必填) log-slow-queries :慢查询日志文件(不可填),自动在 \data\ 创建一个 [hostname]-slow.log 文件   也就是说,只有满足以上三个条件,“慢查询功能”才可能正确开启或关闭。

5.二进制日志

  • 主从复制的基础:binlog日志和relaylog日志

什么是MySQL主从复制 简单来说就是保证主SQL(Master)和从SQL(Slave)的数据是一致性的,向Master插入数据后,Slave会自动从Master把修改的数据同步过来(有一定的延迟),通过这种方式来保证数据的一致性,就是主从复制

复制方式 MySQL5.6开始主从复制有两种方式:基于日志(binlog)、基于GTID(全局事务标示符)。 本文只涉及基于日志binlog的主从配置

复制原理 1、Master将数据改变记录到二进制日志(binary log)中,也就是配置文件log-bin指定的文件,这些记录叫做二进制日志事件(binary log events) 2、Slave通过I/O线程读取Master中的binary log events并写入到它的中继日志(relay log) 3、Slave重做中继日志中的事件,把中继日志中的事件信息一条一条的在本地执行一次,完成数据在本地的存储,从而实现将改变反映到它自己的数据(数据重放)

1、什么是binlog binlog是一个二进制格式的文件,用于记录用户对数据库更新的SQL语句信息,例如更改数据库表和更改内容的SQL语句都会记录到binlog里,但是对库表等内容的查询不会记录。

默认情况下,binlog日志是二进制格式的,不能使用查看文本工具的命令(比如,cat,vi等)查看,而使用mysqlbinlog解析查看。

2.binlog的作用 当有数据写入到数据库时,还会同时把更新的SQL语句写入到对应的binlog文件里,这个文件就是上文说的binlog文件。使用mysqldump备份时,只是对一段时间的数据进行全备,但是如果备份后突然发现数据库服务器故障,这个时候就要用到binlog的日志了。

主要作用是用于数据库的主从复制及数据的增量恢复。

1.啥是binlog? 记录数据库增删改,不记录查询的二进制日志. 2.作用:用于数据同步. 3、如何开启binlog日志功能 在mysql的配置文件my.cnf中,增加log_bin参数即可开启binlog日志,也可以通过赋值来指定binlog日志的文件名,实例如下:

[root@DB02 ~]# grep log_bin /etc/my.cnf log_bin = /application/mysql/logs/dadong-bin

log_bin

[root@DB02 ~]# 提示:也可以按“log_bin = /application/mysql/logs/dadong-bin”命名,目录要存在 为什么要刷新binlog?找到全备数据和binlog文件的恢复临界点.

总结

mysql数据库的binlog和relay log日志有着举足轻重的作用,并且relay log仅仅存在于mysql 的slave库,它的作用就是记录slave库中的io进程接收的从主库传过来的binlog,然后等待slave库的sql进程去读取和应用,保证主从同步,但是binlog主库和从库(slave)都可以存在,记录对数据发生或潜在发生更改的SQL语句,并以二进制的形式保存在磁盘,所以可以通过binlog来实时备份和恢复数据库。

1、什么是binlog binlog是一个二进制格式的文件,用于记录用户对数据库更新的SQL语句信息,例如更改数据库表和更改内容的SQL语句都会记录到binlog里,但是对库表等内容的查询不会记录。

默认情况下,binlog日志是二进制格式的,不能使用查看文本工具的命令(比如,cat,vi等)查看,而使用mysqlbinlog解析查看。

2.binlog的作用 当有数据写入到数据库时,还会同时把更新的SQL语句写入到对应的binlog文件里,这个文件就是上文说的binlog文件。使用mysqldump备份时,只是对一段时间的数据进行全备,但是如果备份后突然发现数据库服务器故障,这个时候就要用到binlog的日志了。

主要作用是用于数据库的主从复制及数据的增量恢复。

Java面试复习总结(Mysql篇9)——MySQL里的那些日志相关推荐

  1. Java面试复习---MySQL(狂神版)

    Java面试复习---MySQL(狂神版) 前言 1.初始MySQL 1.1.为什么学习数据库 1.2.什么是数据库 1.3.数据库分类 1.4.MySQL简介 1.5.安装MySQL 1.6.安装S ...

  2. Java面试复习---Docker(狂神版)

    Java面试复习---Docker(狂神版) 前言 Docker学习路径 Docker概述 Docker为什么出现? Docker的历史 Docker能干嘛 Docker安装 Docker的基本组成 ...

  3. Java面试复习提纲

    Java面试复习提纲 作者:egg 邮箱:xtfggef@gmail.com 微博:http://weibo.com/xtfggef 博客:http://blog.csdn.net/zhangerqi ...

  4. Java 面试问题总结(详细) —— MySql 模块(MySQL高级)(建议收藏)

    文章前言: 此篇文章为 MySql 模块复习,亦可以当做 MySQL 高级的学习,下面列出了一些常见的面试问题,不同于简单的增删查改,面试常问的更偏向于 MySQL 的底层,所以需要具体的去了解一下其 ...

  5. 面试大厂不看这两份Java面试核心知识点原理篇+框架篇,有个屁用?食屎啦泥?

    前言 面试在即,Java知识点很凌乱? 别急,有本套书在呢! 除了原理,还有框架! ★ 精细讲解JVM原理.Java基础.并发编程.数据结构和算法.网络与负载均衡 ★ 深入挖掘数据库与分布式事务.分布 ...

  6. 【MySQL篇】MySQL下载位置

    MySQL下载位置 不懂你们第一次安装MySQL的时候,是不是在官网找了半天找不到社区版的下载地址-- -[suy] 文章目录 MySQL下载位置 一.官网地址 MySQL官网下载地址:https:/ ...

  7. 千道Java面试真题整理系列:MySQL灵魂五十问,在遇面试也不怕.

    1.MySQL 中有哪几种锁? 1.表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低. 2.行级锁:开销大,加锁慢:会出现死锁:锁定粒度最小,发生锁冲突的概率最低,并 ...

  8. 千道Java面试真题整理系列:MySQL灵魂五十问,在遇面试也不怕!

    1.MySQL 中有哪几种锁? 表级锁:开销小,加锁快:不会出现死锁:锁定粒度大,发生锁冲突的概率最高,并发度最低. 行级锁:开销大,加锁慢:会出现死锁:锁定粒度最小,发生锁冲突的概率最低,并发度也最 ...

  9. Java面试必背八股文[5]:MySQL

    Drop.Delete.TRUNCATE的区别 drop drop直接删掉表: drop语句将表所占用的空间全释放掉. drop语句将删除表的结构被依赖的约束(constrain),触发器(trigg ...

最新文章

  1. 【数据结构】邻接矩阵及其实现
  2. 使用 Vagrant 在不同的操作系统上测试你的脚本
  3. 一个Ext2+SWFUpload做的图片上传对话框
  4. php学数据结构,PHP 程序员学数据结构与算法之《栈》
  5. 鳗鱼劈断后下半身还能运动,机器人:拿来吧你丨Science子刊封面
  6. 最大值减去最小值小于或等于num的子数组数量
  7. 性能测试之性能测试的基础理论
  8. DELL XPS 9350 无线网卡DW1820A WIN7驱动异常解决
  9. List 分页加载数据控制机制
  10. nginx管理面板_吸塑包装自建网站上线,阿里云ecs+bt面板+WordPress
  11. android webviewclient 点击事件,Android Api WebViewClient 详细解析
  12. 对齐方式有那些_Excel基础:开始菜单之对齐方式,那些被遗忘的实用功能
  13. 通过FTP备份IOS
  14. memcached(十)动态扩容
  15. 计算n位二进制的所有情况
  16. nlp自然语言处理_NLP自然语言处理基础
  17. 远程控制电脑的实现方法
  18. fortran95 文件读写等操作的字段参数总结
  19. bpsk调制及解调实验_调制的理解
  20. ubuntu下sopcast安装的一点笔记

热门文章

  1. 带老弟做个实时排行榜
  2. 【推荐】Twitter推荐算法架构
  3. 解决win11桌面右键创建只有一个带盾牌的文件夹问题
  4. Python求一组数据的均值,方差,标准差
  5. ES-Elasticsearch数据库查询
  6. 鑫磊股份开启申购:资产负债率较高,实控人控制企业借款高企
  7. secureCRT常用指令
  8. 三星s6android7.0资源,不忘老旗舰!三星S6系列月底升至Android 7.0
  9. 反思一段失败的创经历:从月收入3万元到月收入1万元
  10. 十八个生活秘诀让男人永保青春