Mysql中undo、redo与binlog的区别浅析

Mysql中undo、redo与binlog的区别浅析

1. 概述

在Mysql数据库中,有三种记录业务操作的方式,它们分别是undo、redo与binlog。undo是指能够将一个事务回滚到之前的状态,redo则是指能够重新执行一个事务并将其提交,binlog则是指类似于日志的方式记录每条sql语句的操作记录。下面我们将分别对它们进行详细的介绍与比较。

2. undo

在Mysql中,undo日志是以类似于回滚段的格式保存在存储引擎中的。每次进行更新操作时,都会先将事务日志写入到undo log中,这样即使在事务进行过程中出现了问题,可以通过undo log中的信息将数据库恢复到之前的状态。通常情况下,undo log的保留时间是和事务本身的存储时间一致的。

下面是一个undo的示例,假设我们有如下的一张表:

create table t1 (
id int not null auto_increment,
name varchar(20),
primary key(id)
);

我们先插入一条记录:

insert into t1 (name) values ('Alice');

此时会在undo日志中新增一条记录,记录这次操作的undo log信息。

接下来,我们在这条记录上进行修改操作:

update t1 set name='Bob' where id=1;

这时候,undo log会再次新增一条记录,并记录这次操作的undo log信息。接着我们再进行一次更新操作:

update t1 set name='Charlie' where id=1;

同样地,undo log还会新增一条记录,记录这次操作的undo log信息。

最终,我们可以使用如下的语句回滚到初始状态:

rollback to 1;

这里的1表示数据库中第一个事务的undo log。

3. redo

redo是指归档日志,它主要是用于支持事务的持久化。每次进行提交操作时,事务日志会被写入到redo log中。并且,redo log中的记录会在数据库重启后被反复应用,以此来保证数据的一致性和可靠性。

下面是一个redo的示例,仍然沿用上面的例子。我们现在将第二个更新操作进行提交:

commit;

这时,redo log就会将这次操作所需要的信息写入到归档文件中。接下来,如果我们关闭了Mysql服务器,并重新启动它,这时候Mysql服务器就会将上一次提交操作的记录再次应用一次,以保证数据库的一致性。

4. binlog

binlog是记录所有可能会更改数据库数据的语句的日志。它的作用是为了在数据库出现故障时进行恢复操作。在Mysql数据库中,binlog有两种模式,分别是statement和row。在statement模式下,记录的是每个执行的sql语句,而在row模式下,记录的是对每一行的修改。

下面是一个binlog的示例,我们对刚才的表进行一些修改操作:

update t1 set name='David' where id=1;
delete from t1 where id=1;

这时候,binlog就会记录下这两条操作的日志信息。

在statement模式下,binlog的记录可能会出现问题,因为当一些语句在执行时,可能会对其他表产生影响。而在row模式下,这种情况不会出现,因为它记录的是对每一行的修改。

5. 总结

在Mysql中,undo、redo与binlog记录不同的信息,并且它们的作用也不同。undo主要是用户回滚不希望的操作,redo用于事务的持久化,而binlog则是为了在数据出现故障时进行恢复操作。

需要注意的是,我们需要根据业务的需求来选择合适的记录方式,这样才能保证数据的安全性、可靠性以及高效性。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Mysql中undo、redo与binlog的区别浅析 - Python技术站

(0)
上一篇 2023年5月22日
下一篇 2023年5月22日

相关文章

  • SQL注入原理与解决方法代码示例

    SQL注入原理与解决方法介绍 SQL注入攻击是通过在应用程序中嵌入恶意代码,从而使攻击者可以向数据库提交恶意SQL语句的一种方式。这种攻击方式可以绕过应用程序的安全控制,从而造成安全漏洞,可能导致机密数据泄露、数据篡改甚至拒绝服务等安全风险。 解决SQL注入攻击的方法主要有以下几种: 严格的输入过滤: 对用户输入的数据进行校验和限制,防止用户在输入数据时注入…

    database 2023年5月19日
    00
  • [Redis] redis业务实践 , 这次用哈希

    经常会被人问在什么场景下使用到了redis ? 这个问题和业务是很相关的 , 脱离业务需求的回答都不能说服别人. 在我的业务里有一个提交试用的表单申请 , 这个申请之前是默认直接存入数据库的订单表和企业表 . 后来不知道被那个闲人发现了,就一直往里提交垃圾数据 , 增加了验证码和手机短信验证码 , 仍然不能阻挡住他提交的热情 . pm一生气 , 说把它改成后…

    Redis 2023年4月11日
    00
  • DBMS 中的主键

    下面是关于DBMS中的主键的完整攻略: 主键定义 主键是一列或一组列,可唯一地标识数据库表中的每个记录。主键必须包含唯一的值,而且不能为空。主键不同于普通的键,它只能由一列或一组列组成,而不是可以由多列组合形成。 主键的作用 主键可以唯一地标识数据库表中的每条记录,因此它具有以下作用:1. 保证每条记录的唯一性,避免重复数据的出现;2. 方便与其它表进行关联…

    database 2023年3月27日
    00
  • CentOS系统中MySQL5.1升级至5.5.36

    下面是CentOS系统中MySQL5.1升级至5.5.36的完整攻略,包括以下步骤: 步骤一:备份数据 在升级前,务必备份好现有的MySQL数据库,以防意外情况发生。可以使用mysqldump命令备份。 mysqldump -u root -p –all-databases > backup.sql 步骤二:移除旧版本MySQL 在安装新版本前,需要…

    database 2023年5月22日
    00
  • DBMS中的候选密钥

    在DBMS中,候选密钥是指能够确定关系中每个元组的唯一性的最小键集合。换句话说,它是可以作为关系主键的备选集合。 实际上,一个关系表可能有多个候选密钥,但只有一个可以作为主键,即作为唯一标识关系表中的每个元组的键。 下面,我们来详细讲解DBMS中的候选密钥: 1. 确定候选密钥集合 在DBMS中,确定候选密钥集合需要从关系表中推导出来。具体来讲,候选密钥必须…

    database 2023年3月27日
    00
  • MySQL中sleep函数的特殊现象示例详解

    以下是关于“MySQL中sleep函数的特殊现象示例详解”的完整攻略。 什么是MySQL中的sleep函数? sleep函数是MySQL中的一个内置函数,它的作用是让当前的线程休眠(暂停执行),时间单位为秒。它的语法如下: SELECT SLEEP(seconds); 其中,seconds 参数表示要休眠的时间,最多可以休眠 31536000 秒(即 1 年…

    database 2023年5月22日
    00
  • 解决MySQL中的Slave延迟问题的基本教程

    针对MySQL中Slave延迟问题,以下是一些解决步骤的完整攻略: 1. 确认Slave延迟问题 当MySQL中的Slave延迟时,可以使用以下命令检查: show slave status \G 其中的“Seconds_Behind_Master”值就是Slave和Master之间的延迟时间。如果该值一直处于非常高的状态,那么就需要进行一些调整了。 2. …

    database 2023年5月19日
    00
  • Mysql命令大全(详细篇)

    Mysql命令大全(详细篇) 概述 MySQL是一个开源关系型数据库管理系统,常用于构建Web应用程序,并且是LAMP(Linux、Apache、MySQL、PHP/Python/Perl)技术栈中必不可少的组件之一。 随着MySQL数据库使用的普及,我们需要了解MySQL的基本操作,本篇文章将介绍MySQL的命令行操作。 安装MySQL 如果您还未安装My…

    database 2023年5月21日
    00
合作推广
合作推广
分享本页
返回顶部