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

yizhihongxing

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日

相关文章

  • Linux系统中的文件类型及文件扩展名详解

    Linux系统中的文件类型及文件扩展名详解 介绍 在Linux系统中,文件系统中的每个文件都有一个文件类型和扩展名。文件类型表示该文件的属性,包括文件的权限、用户和组归属,以及时间戳信息等。扩展名则表示文件类型,通常用于指示该文件的内容类型,方便用户快速识别文件。 常见的文件类型 Linux系统中常见的文件类型有: 普通文件(regular file):即常…

    database 2023年5月22日
    00
  • mysql中drop、truncate与delete的区别详析

    MySQL中drop、truncate与delete的区别详析 在 MySQL 中,我们经常会用到三个操作:DROP、TRUNCATE 和 DELETE,它们旨在删除表中的数据,但它们之间有很大的区别。 DROP DROP 的作用是删除整个表。执行 DROP 命令后,表结构和数据都将被删除,而且不可恢复。因此,执行此命令时需要谨慎。 示例1:删除表 DROP…

    database 2023年5月18日
    00
  • redis中数据库个数以及设置使用哪个数据库

    redis中默认有16个数据库,查询方式如下: 127.0.0.1:6379> config get databases 1) “databases” 2) “16” 在某些场景下,可能多个应用同时使用一个redis,那我们希望不同应用的redis数据是隔离的,这时就可以采用设置不同redis数据库的方式,在springboot整合redis中配置如下…

    Redis 2023年4月16日
    00
  • oracle ORA-00031:session marked for kill(标记要终止的会话)解决方法

    如果Oracle数据库中发现错误信息ORA-00031,可能会让用户非常困惑,因为这种错误会导致当前正在运行的会话被强制终止。此时最好的解决方法是找出问题的根源并进行修复,以下是完整的解决攻略。 1. 什么是ORA-00031错误? ORA-00031错误是Oracle数据库中的一个常见错误,通常是由于Oracle数据库服务器进程中存在某些虚拟会话需要被终止…

    database 2023年5月21日
    00
  • PHP组合查询多条件查询实例代码第2/2页

    现在我来为你详细讲解一下如何进行“PHP组合查询多条件查询实例代码”的操作步骤。 首先,我们需要明确以下几个概念: 组合查询:多个查询条件联合起来进行数据的查询操作。 index.php页面:用户输入查询条件的网页。 search.php页面:接收查询条件,并将查询结果显示给用户的网页。 下面,我将会分别详细介绍这些概念的操作流程及代码实现方式: 一、组合查…

    database 2023年5月21日
    00
  • Mysql占用CPU过高如何优化,如何解决 批量 kill mysql 中运行时间长的sql

    2017-02-28 15:13 331人阅读 评论(0) 举报   MySQL占用CPU过高如何优化   一次生产DB服务器的 超负荷运行问题解决: 1.查看生产DB服务器top列表, 执行 top 命令 查看Cpu(s) 参数一直处于 98% 状态 ,load average达到了 5  (4核服务器)   可见DB已经超负荷运行了   2.使用root…

    MySQL 2023年4月13日
    00
  • 深入分析PHP优化及注意事项

    深入分析PHP优化及注意事项 PHP是一种流行的服务器端编程语言,然而,在应用程序较大而复杂的情况下,它的性能可能会受到影响。在本篇文章中,我将介绍一些PHP优化技术和注意事项,帮助你更好地提升PHP应用程序的性能。 1. 使用OPcache OPcache是一个免费的开源PHP缓存扩展,可以在服务器端缓存并预编译PHP脚本。OPcache能够避免每次请求时…

    database 2023年5月21日
    00
  • 详解MySQL使用GROUP BY分组查询

    MySQL中GROUP BY语句用于将数据行按照一个或多个列进行分组,然后对每个组进行聚合计算。在GROUP BY语句中,可以使用聚合函数对每个组进行计算,例如SUM、AVG、MAX、MIN、COUNT等。 以下是GROUP BY语句的一般语法: SELECT column1, column2, …, aggregate_function(column_…

    MySQL 2023年3月9日
    00
合作推广
合作推广
分享本页
返回顶部