`

Mysq bin redo undo log

 
阅读更多

1. undo log

undo日志用于存放数据修改被修改前的值,是逻辑日志,比如delete sql 对应的undo log是一条insert sql。undo log作用有两个,一个是用于事务回滚操作,保证事务原子性,部分解决持久性;另一个是对MVCC实现,即MVCC实现是依赖于undo log的。

 

实现原子性和持久化的事务的简化过程

 

假设有A、B两个数据,值分别为1,2。

A.事务开始.

B.记录A=1到undolog.

C.修改A=3.

D.记录B=2到undolog.

E.修改B=4.

F.将undolog写到磁盘。

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

记录的是新数据的备份。在事务提交前,只要将Redo Log持久化即可,不需要将数据持久化。当系统崩溃时,虽然数据没有持久化,但是RedoLog已经持久化。系统可以根据RedoLog的内容,将所有数据恢复到最新的状态。注意,redo log 和 undo log都是顺序io,而普通数据写磁盘是随机io,顺序io极大的提高了效率。

 

-Undo+Redo

事务的简化过程

假设有A、B两个数据,值分别为1,2.

A.事务开始.

B.记录A=1到undolog.

C.修改A=3.

D.记录A=3到redolog.

E.记录B=2到undolog.

F.修改B=4.

G.记录B=4到redolog.

H.将redolog写入磁盘。

I.事务提交

 

-Undo+Redo

事务的特点

A.为了保证持久性,必须在事务提交前将RedoLog持久化。

B.数据不需要在事务提交前写入磁盘,而是缓存在内存中。

C.RedoLog保证事务的持久性。

D.UndoLog保证事务的原子性。

E.有一个隐含的特点,数据必须要晚于redolog写入持久存储

 

redo log 与 bin log

https://www.jianshu.com/p/4bcfffb27ed5

redolog 是innodb才有的,binlog是server有的所有引擎都可以用

redolog是循环覆盖的,binlog是一直可以append,所以只有binlog才能用来做全量恢复

redo log必需与binlog一致,否则恢复数据会有问题,redo log通过两阶段提交来保证和bin log强一致

 

3. bin log

binlog,即二进制日志,它记录了数据库上的所有改变,并以二进制的形式保存在磁盘中;

它可以用来查看数据库的变更历史、数据库增量备份和恢复、Mysql的复制(主从数据库的复制)。

 

4. slow log 慢查询日志

 MySQL的慢查询日志是MySQL提供的一种日志记录,它用来记录在MySQL中响应时间超过阀值的语句,具体指运行时间超过long_query_time值的SQL,则会被记录到慢查询日志中。long_query_time的默认值为10,意思是运行10s以上的语句。默认情况下,Mysql数据库并不启动慢查询日志,需要我们手动来设置这个参数slow_query_log,当然,如果不是调优需要的话,一般不建议启动该参数,因为开启慢查询日志会或多或少带来一定的性能影响。慢查询日志支持将日志记录写入文件,也支持将日志记录写入数据库表。

 

5. 为什么MySQL有binlog,还有redo log?

这个是因为MySQL体系结构的原因,MySQL是多存储引擎的,不管使用那种存储引擎,都会有binlog,而不一定有redo log,简单的说,binlog是MySQL Server层的,redo log是InnoDB层的。以及redo log是不停的append的,bin log是事务提交后才会触发io写的

http://www.ywnds.com/?p=7892   《binlog 与 redo log 顺序一致性问题》

 

 

分享到:
评论

相关推荐

    mysql和log4j的jar包

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,而Log4j则是Java平台上广泛使用的日志记录框架。这两个组件在软件开发中起着至关重要的作用,尤其是在Java应用程序中。 MySQL是一款开源、免费的SQL数据库,它...

    mysq 优化方案+优化策略

    mysq 优化方案+优化策略mysq 优化方案+优化策略mysq 优化方案+优化策略mysq 优化方案+优化策略mysq 优化方案+优化策略mysq 优化方案+优化策略mysq 优化方案+优化策略

    mysq5.0l安装文件

    mysq5.0l安装文件,mysql-gui-tools-5.0-r2-win32.msi。小巧玲珑在东西。

    mysq常用函数

    mysq常用函数字符串处理函数日期和时间函数常用的数值函数 CEIL(x)返回大于X的最大整数

    mysql-connector-java-5.1.48-bin.jar

    mysql-connector-java-5.1.48-bin用于连接mysql数据库

    oracle数据导入到Mysq库

    在IT行业中,数据库迁移是一项常见的任务,特别是在不同的数据库系统之间,如从Oracle迁移到MySQL。Oracle是一种成熟的商业关系型数据库管理系统,而MySQL则是一个广泛使用的开源数据库,它们各有优势,适用于不同...

    mysq.rar_mysq_php mysq_php 学生管理_php 学生管理 系统_php+mysq

    标题中的“mysq.rar_mysq_php mysq_php 学生管理_php 学生管理 系统_php+mysq”表明这是一个与MySQL数据库和PHP编程相关的压缩文件,主要用于构建一个学生管理系统。在这个系统中,PHP作为服务器端脚本语言与MySQL...

    mysq乱码解决问题

    在 Windows 上,可以通过在命令行中进入 MySQL 的 `bin` 目录,然后使用 `mysql -uroot -p 密码 数据库名称 要恢复的数据库.sql` 命令来导入数据。如果出现乱码,可能需要检查目标服务器的 MySQL 版本和字符集设置。...

    mysqbinlog-flashback

    mysqlbinlog的flashback

    mysq.rar_php+mysq

    【标题】"mysq.rar_php+mysq"指的是一个关于MySQL数据库与PHP编程结合使用的学习资源包。这个压缩文件可能是为了帮助开发者或者学习者更好地理解如何在PHP项目中集成和操作MySQL数据库。"mysq"通常指的是MySQL,而...

    最好的mysq第三方工具l

    最好的mysq第三方工具-----安装程序文件(需要注册机)

    JAVA+MYsqlMYsq

    Java和MySQL是两种非常重要的IT技术,广泛应用于各种软件开发,尤其是web应用。在这个"JAVA+MYsql学生信息管理系统"的示例中,我们将探讨如何使用Java编程语言来连接并操作MySQL数据库,实现一个简单的学生信息管理...

    好用的mysq工具

    非常好用,写SQL语句非常方便,可以 导入SQL执行,也可以导出SQL

    Navicat for MySQ64位

    《Navicat for MySQL:64位数据库管理神器详解》 Navicat for MySQL是一款功能强大的数据库管理和开发工具,尤其适用于64位操作系统环境。它以其直观的界面、丰富的功能和出色的性能,深受广大数据库管理员和开发者...

    mysq相关jar

    标题"mysq相关jar"指的是用于连接MySQL数据库的Java驱动程序,这个驱动程序允许Java应用程序通过JDBC API与MySQL进行交互。 描述中提到的"搭建SSH时,数据库使用mysql时,需要的相关jar包",这里指出了在构建基于...

    MySQ1L-Front_Setup

    mysql的可视化管理软件

    mysq的llinux安装包-5.6.34.zip

    在这个压缩包"mysq的llinux安装包-5.6.34.zip"中,包含了在Linux环境下安装MySQL 5.6.34所需的所有文件,主要文件是`mysql-5.6.34.tar.gz`,这是一个用于Linux系统的源码包。 以下是对这个安装过程的详细步骤和相关...

    mysq单向或双向l数据同步

    2. **配置主库**:在 A 的 `my.ini` 文件中设置 `server-id` 为 1,开启二进制日志 `log-bin`,并指定同步的数据库 `binlog-do-db` 为 `test`。 3. **创建从库**:在从机 B 上创建与主机 A 结构相同的数据库 `backup...

    mysq安装图解

    MySQL 安装图解 MySQL 安装图解是指通过图形化界面来安装 MySQL 数据库的过程。本文将详细介绍 MySQL 安装图解的每个步骤,帮助读者快速了解 MySQL 安装过程。 一、下载和解压 MySQL 安装文件 ...

    phpPDO+mysq

    PHP PDO(PHP Data Objects)是PHP的一个扩展,用于提供数据库访问的抽象层,它支持多种数据库引擎,包括MySQL。... 1. **PDO与MySQL的连接** ...例如: ... $dsn = 'mysql:host=localhost;dbname=testdb';...

Global site tag (gtag.js) - Google Analytics