侧边栏壁纸
博主头像
憨憨大头个人博客博主等级

心存希冀,目有繁星

  • 累计撰写 110 篇文章
  • 累计创建 13 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

MYSQL中redolog和binlog之间的区别

Administrator
2024-09-02 / 0 评论 / 0 点赞 / 2 阅读 / 2540 字

场景:

redo log

假设现在我们想对数据库的数据进行修改操作,现在一条 update 语句过来,一般 update 操作都伴随着查询的操作,得先找到这条数据,然后再进行更新操作对吧。

如果我有好几十条 update 语句先后更新呢?这样想的话,你就能想到,就这些操作,成本就高的不行,那能不能降低一下这些成本呢?

但是此时,它并没有更新到磁盘上去对吧?别担心, InnoDB 会在恰当的时候,把这条及记录更新到磁盘上去,而这个更新往往是在系统比较空闲的时候做。

这样的思想或者技术,有个专有名词: WAL 技术,也就是WriteAheadLogging,核心就是先写日志,再写磁盘

redo log 的大小是固定的,前面的内容会被覆盖,一旦写满,就会触发 redo log 到磁盘的同步,以便腾出空间记录后面的修改。

bin log

binlog记录了所有数据库【表结构】变更(例如CREATE、ALTER TABLE…)以及【表数据】修改(INSERT、UPDATE、DELETE…)的二进制日志。不会记录SELECT和SHOW这类操作,因为这类操作对数据本身并没有修改,但可以通过查询通用日志来查看MySQL执行过的所有语句。

binlogmysql server层维护的,跟采用何种引擎没有关系,记录的是所有的更新操作的日志记录。binlog是在事务最终commit前写入的。我们执行SELECT等不涉及数据更新的语句是不会记binlog的,而涉及到数据更新则会记录。要注意的是,对支持事务的引擎如innodb而言,必须要提交了事务才会记录binlog

binlog 文件写满后,会自动切换到下一个日志文件继续写,而不会覆盖以前的日志,这个也区别于 redo log,redo log 是循环写入的,即后面写入的可能会覆盖前面写入的。

mysql中binlog和redolog的区别

  • MySQL中的binlog和redolog都是用于数据恢复或复制的日志文件,但它们的作用不同。
  1. binlog (binary log)

binlog是MySQL的二进制日志文件,记录了所有数据库的修改操作。它包含了在数据库中执行的所有语句,例如INSERT、UPDATE和DELETE等等。binlog可以用于以下用途:

  • 数据恢复:在发生故障的情况下,可以使用binlog将数据还原到故障发生之前的状态。
  • 数据复制:可以使用binlog将数据库更改操作复制到其他MySQL服务器上,通常用于备份、负载均衡、高可用等。
  • 数据库故障调试:可以使用binlog来查找数据库操作历史记录,查找错误的原因。
  1. redolog (redo log)

redolog是MySQL的重做日志文件,记录了当事务进行修改操作时所进行的一系列物理操作,例如页的创建、修改和删除等等。redolog可以用于以下用途:

  • 数据恢复:在发生崩溃的情况下,可以使用redolog将数据库恢复到崩溃之前的状态。
  • 数据库性能优化:redolog是在内存中缓存的,可以快速记录磁盘中的所有修改操作,提高数据库性能。通常建议将redolog文件放在快速磁盘上,如SSD等。

总的来说,binlog和redolog的功能不同,但它们都可以用于数据库数据的恢复和复制。在实际的应用场景中,我们可以根据需求来选择使用哪种日志。

使用场景是怎么样的呢

  1. binlog的使用场景:
  • 数据恢复:可以使用binlog来恢复数据库到特定时间点的状态,也可以将数据库从备份还原后使用binlog来恢复数据到备份生成后的某个时间点。
  • 数据复制:可以使用binlog将主数据库的更改复制到从数据库,从而实现数据备份、负载均衡、高可用集群等。
  1. redolog的使用场景:
  • 数据恢复:redolog记录了事务执行的过程中,所进行的修改操作,当MySQL服务器宕机或者崩溃时,会使用redo log来将它们重新执行,从而将数据库回滚到宕机前的状态。
  • 提高数据库性能:当事务执行过程中,MySQL需要频繁地将数据写入磁盘,这样会消耗大量的时间和I/O资源。为了提高MySQL的性能,MySQL会将redo log暂存在内存中,最终再将其写入磁盘。此时,如果将redo log文件放在SSD等快速存储设备上,可以更快地将其写入磁盘,从而提升MySQL的性能。

综上所述,binlog主要用于数据恢复和数据复制,而redo log主要用于提高MySQL的性能和数据恢复。在实际应用中,应根据具体需求来选择使用哪种日志。

0

评论区