了解个大概吧。

上回说到数据库的备份与恢复,日志文件在其中占有很重要的位置。

但是,我查了下资料,发现想搞懂这个数据库日志其实并不容易。包括网上许多文章,说了许多,但我越看越糊涂。只有一些mysql的日志文件原理介绍,相对好一些。mysql因为应用广泛,使用者众,作为数据库的学习对象,也算有代表性。

一、MySQL的日志文件

MySQL中有七种日志文件,分别是:

重做日志(redo log)
回滚日志(undo log)
二进制日志(binlog)
错误日志(errorlog)
慢查询日志(slow query log)
一般查询日志(general log)
中继日志(relay log)

其中重做日志和回滚日志与事务操作息息相关,二进制日志也与事务操作有一定的关系,这三种日志,对理解MySQL中的事务操作有着重要的意义。

二、RedoLog(重做日志)

用于崩溃恢复。防止在发生故障的时间点,尚有脏页未写入磁盘,在重启mysql服务的时候,根据redo log进行重做,从而达到事务的持久性这一特性。redo log 是物理日志,记录的是“在某个数据页上做了什么修改”。

现在的数据库,为了提高性能,更改数据时,是先更改内存中的数据,然后等积攒了一定数量的更改记录才一起持久化到磁盘。很明显,这样就会有数据丢失的风险。幸而,数据库秉承修改数据先写日志的原则,数据修改时分别写RedoLog和UndoLog,其中RedoLog记录修改信息,而UndoLog是该修改的逆操作,比如,我们做的操作是INSERT,则UndoLog生成一条DELETE语句。所以说,RedoLog上记录的是物理格式,而UndoLog记录的是逻辑格式。

这个Redo文件其实也是先写到内存,但它持久化的频率比较密。比如当事务提交的时候就会持久化到磁盘。

回到上面提到的问题,当操作数据写到内存,事务提交后数据库出故障,由于RedoLog已经持久化,则数据库就可以根据RedoLog上的信息重放,保证用户的操作数据不丢失。

redolog文件大小是固定的,循环往复地使用。

三、UndoLog(回滚日志)

如前所述,undo log 叫做回滚日志,记录数据被修改前的信息,为了在发生错误时回滚之前的操作。

redo log记录的是物理日志,undo是逻辑日志。可以认为当delete一条记录时,undo log中会记录一条对应的insert记录,反之亦然,当update一条记录时,它记录一条对应相反的update记录。

当执行rollback时,就可以用undo log中的逻辑记录进行回滚。有时候应用到行版本控制的时候,也是通过undo log来实现的:当读取的某一行被其他事务锁定时,它可以从undo log中分析出该行记录以前的数据是什么,从而提供该行版本信息,让用户实现非锁定一致性读取(MVCC,多版本并发控制)。

四、BinLog(二进制日志)

用于主从复制和数据恢复。

【主从复制】
从库生成两个线程,一个I/O线程,一个SQL线程;

从库I/O线程请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中;而主库则会生成一个log dump线程,用来给从库I/O线程传binlog;

从库SQL线程读取relay log文件中的日志,并解析成sql语句逐一执行。

【数据恢复】
如果数据库误操作, 可以找到距离误操作最近的时间节点的bin log,重放到临时数据库里,然后选择误删的数据节点,恢复到线上数据库。

binlog 是逻辑日志,记录的是这个语句的原始逻辑,即SQL语句。

binlog通过追加的方式记录日志,当文件尺寸大于给配置值后,后续的日志会记录到新的文件上。

五、各日志写入时机

参考资料:
数据库原理四—MySQL日志

mysql的日志文件相关推荐

  1. linux查看mysql连接日志文件,linux下查看mysql日志文件的方法

    查看mysql日志方法: mysql默认不允许我们查看日志.需要更改一些设置 1 vi 更改配置文件 允许用户查看日志文件 sudo vi /etc/mysql/mysql.conf.d/mysqld ...

  2. MySQL开发 日志文件必备的知识点

    MySQL 日志文件开发必备的知识点 参考来源:juejin.im/post/5b7c0aabf265da438415b9eb 前言 日志文件记录了影响MySQL数据库的各种类型活动,MySQL数据库 ...

  3. mysql二进制日志文件差不多_mysql数据同步-基于二进制日志文件和position复制点的方式...

    mysql的binlog日志有三种格式,分别为statement,mixed,以及row. 1.Statement:每一条会修改数据的sql都会记录在binlog中 优缺点:1)不用记录每一行的变化, ...

  4. MySQL二进制日志文件过期天数设置说明

    今天在处理业务库中二进制文件的时候,想更改二进制文件的过期天数,发现日期如果设置成2位以上的整数.都会出现如下的警告.不能成功的设置过期日期天数.MySQL版本从5.1到5.5都是一样的. mysql ...

  5. php mysql log文件怎么打开_如何查看mysql的日志文件

    首先,介绍一下mysql日志的种类.一般来说,日志有五种,分别为: (推荐学习:mysql教程)错误日志:-log-err (记录启动,运行,停止mysql时出现的信息) 二进制日志:-log-bin ...

  6. 宝塔清mysql主从日志_宝塔面板Mysql主从日志文件mysql-bin文件清除方法

    今天遇到这个问题,转载一篇不错的文章! 今天发现有台服务器的硬盘满了,这个服务器只放置了一个在线客服软件和10几个MySQL数据库加起来也就几百M的占用,后来查了一遍发现原来是MySQL日志的锅. 发 ...

  7. mysql历史日志文件_MySQL 历史 binlog 日志处理

    MySQL 历史 binlog 日志处理 一.问题的引出 MySQL binlog 如果不清理会占用服务器的空间,那么怎么处理binlog日志呢 二.解决办法 1.物理删除 df -Th 查看磁盘空间 ...

  8. MySQL二进制日志文件的用法_数据恢复

    文章目录 开启二进制日志功能 关闭/打开二进制日志记录 刷新二进制日志文件 查看二进制日志文件的存储位置 利用二进制日志文件恢复数据的本质 二进制日志提取/导出到脚本文件中 查看当前二进制日志的最后一 ...

  9. mysql 主从日志文件_mysql 主从日志文件mysql

    [导读]默认情况下mysql会一直保留mysql-bin文件,这样到一定时候,磁盘可能会被撑满,这时候是否可以删除这些文件呢,是否可以安全删除,是个问题,不建议使用rm命令删除,这样有可能会不安全,正 ...

最新文章

  1. Struts2和SpringMVC的执行流程。
  2. VC 6.0中添加库文件和头文件
  3. 网络——Cisco Packet Tracer 思科模拟器组网实验
  4. java 生成正弦波声音_如何生成一个正弦波声音曲线?
  5. leetcode1432. 改变一个整数能得到的最大差值(贪心)
  6. 溢出科普:heap overflow溢出保护和绕过
  7. 虚电路方式,数据报方式
  8. 将多个txt文件合并成一个
  9. Bypass disable_function
  10. HC05和电脑蓝牙通讯
  11. python编写beta计算器_|python编写计算器
  12. 第二天性-人类进化的经济起源
  13. PHP面向对象编程的基本概念定义操作属性方法
  14. blendere删除标注
  15. Qt Creator 使用 QMediaPlayer 播放音频无声音
  16. 1.3RK3288积累之命令1
  17. Invalid bound statement (not found)异常解决
  18. 关闭新版Chrome中的深色主题
  19. JS动态设置div样式
  20. Intent之对象传递(Serializable传递对象和对象集合)

热门文章

  1. 杰理之MIC 省电 容方案 微信语音 或通话 时前面 几秒钟有 哒哒声【篇】
  2. 用一维字符数组方法输出下面的图形
  3. pgAdmin4卡在Please enter the password for the user ‘postgres‘ to connect the server - “PostgreSQL“
  4. IDEA插件系列(92):Rainbow Fart插件——吹彩虹屁
  5. 船舶强度与结构设计大作业二matlab,船舶强度与结构设计题目
  6. 蚂蚁树林小游戏玩法介绍
  7. 数学笔记9——牛顿迭代法
  8. 学计算机的人会单身吗,大学哪些专业最容易单身 大学哪些专业最不容易脱单...
  9. 数字图像位移传感器在大坝安全监测运用
  10. unity 渲染层级详解