mysql的日志文件
了解个大概吧。
上回说到数据库的备份与恢复,日志文件在其中占有很重要的位置。
但是,我查了下资料,发现想搞懂这个数据库日志其实并不容易。包括网上许多文章,说了许多,但我越看越糊涂。只有一些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的日志文件相关推荐
- linux查看mysql连接日志文件,linux下查看mysql日志文件的方法
查看mysql日志方法: mysql默认不允许我们查看日志.需要更改一些设置 1 vi 更改配置文件 允许用户查看日志文件 sudo vi /etc/mysql/mysql.conf.d/mysqld ...
- MySQL开发 日志文件必备的知识点
MySQL 日志文件开发必备的知识点 参考来源:juejin.im/post/5b7c0aabf265da438415b9eb 前言 日志文件记录了影响MySQL数据库的各种类型活动,MySQL数据库 ...
- mysql二进制日志文件差不多_mysql数据同步-基于二进制日志文件和position复制点的方式...
mysql的binlog日志有三种格式,分别为statement,mixed,以及row. 1.Statement:每一条会修改数据的sql都会记录在binlog中 优缺点:1)不用记录每一行的变化, ...
- MySQL二进制日志文件过期天数设置说明
今天在处理业务库中二进制文件的时候,想更改二进制文件的过期天数,发现日期如果设置成2位以上的整数.都会出现如下的警告.不能成功的设置过期日期天数.MySQL版本从5.1到5.5都是一样的. mysql ...
- php mysql log文件怎么打开_如何查看mysql的日志文件
首先,介绍一下mysql日志的种类.一般来说,日志有五种,分别为: (推荐学习:mysql教程)错误日志:-log-err (记录启动,运行,停止mysql时出现的信息) 二进制日志:-log-bin ...
- 宝塔清mysql主从日志_宝塔面板Mysql主从日志文件mysql-bin文件清除方法
今天遇到这个问题,转载一篇不错的文章! 今天发现有台服务器的硬盘满了,这个服务器只放置了一个在线客服软件和10几个MySQL数据库加起来也就几百M的占用,后来查了一遍发现原来是MySQL日志的锅. 发 ...
- mysql历史日志文件_MySQL 历史 binlog 日志处理
MySQL 历史 binlog 日志处理 一.问题的引出 MySQL binlog 如果不清理会占用服务器的空间,那么怎么处理binlog日志呢 二.解决办法 1.物理删除 df -Th 查看磁盘空间 ...
- MySQL二进制日志文件的用法_数据恢复
文章目录 开启二进制日志功能 关闭/打开二进制日志记录 刷新二进制日志文件 查看二进制日志文件的存储位置 利用二进制日志文件恢复数据的本质 二进制日志提取/导出到脚本文件中 查看当前二进制日志的最后一 ...
- mysql 主从日志文件_mysql 主从日志文件mysql
[导读]默认情况下mysql会一直保留mysql-bin文件,这样到一定时候,磁盘可能会被撑满,这时候是否可以删除这些文件呢,是否可以安全删除,是个问题,不建议使用rm命令删除,这样有可能会不安全,正 ...
最新文章
- Struts2和SpringMVC的执行流程。
- VC 6.0中添加库文件和头文件
- 网络——Cisco Packet Tracer 思科模拟器组网实验
- java 生成正弦波声音_如何生成一个正弦波声音曲线?
- leetcode1432. 改变一个整数能得到的最大差值(贪心)
- 溢出科普:heap overflow溢出保护和绕过
- 虚电路方式,数据报方式
- 将多个txt文件合并成一个
- Bypass disable_function
- HC05和电脑蓝牙通讯
- python编写beta计算器_|python编写计算器
- 第二天性-人类进化的经济起源
- PHP面向对象编程的基本概念定义操作属性方法
- blendere删除标注
- Qt Creator 使用 QMediaPlayer 播放音频无声音
- 1.3RK3288积累之命令1
- Invalid bound statement (not found)异常解决
- 关闭新版Chrome中的深色主题
- JS动态设置div样式
- Intent之对象传递(Serializable传递对象和对象集合)
热门文章
- 杰理之MIC 省电 容方案 微信语音 或通话 时前面 几秒钟有 哒哒声【篇】
- 用一维字符数组方法输出下面的图形
- pgAdmin4卡在Please enter the password for the user ‘postgres‘ to connect the server - “PostgreSQL“
- IDEA插件系列(92):Rainbow Fart插件——吹彩虹屁
- 船舶强度与结构设计大作业二matlab,船舶强度与结构设计题目
- 蚂蚁树林小游戏玩法介绍
- 数学笔记9——牛顿迭代法
- 学计算机的人会单身吗,大学哪些专业最容易单身 大学哪些专业最不容易脱单...
- 数字图像位移传感器在大坝安全监测运用
- unity 渲染层级详解