当前位置 : 主页 > 编程语言 > java >

这是我在51CTO博客的第一篇博文

来源:互联网 收集:自由互联 发布时间:2023-09-03
第一段:自我介绍 24届双非本软件工程java方向的一只小菜鸡 第二段:技术分享(MySQL的BinLog日志和RedoLog日志) BinLog:数据库层面的日志,以事务为单位记录sql语句,属于逻辑日志 Re

第一段:自我介绍

24届双非本软件工程java方向的一只小菜鸡



第二段:技术分享(MySQL的BinLog日志和RedoLog日志)

BinLog:数据库层面的日志,以事务为单位记录sql语句,属于逻辑日志

RedoLog:储存引擎innoDB的重做日志,记录数据页上的数据更改,属于物理日志,RedoLog,当buffer pool把数据刷到硬盘上时,它会覆盖掉之前的数据。

记录的顺序:当数据更新时,更新数据会先记录到RedoLog日志中,这时RedoLog日志中的日志状态处于prepare状态,当一个事务的操作完成并提交时,MySQL将事务更新到BinLog上,最后将RedoLog改为commit状态。(二阶段提交)

数据库恢复时,认为当BinLog日志有这条事务的记录,即使RedoLog日志是prepare状态,也能够恢复。

数据库恢复:

如果数据库误操作, 如何执行数据恢复?

在回答这个问题之前先了解一个概率:LSN

LSN 是 日志序列号, 为 log sequence number 的缩写,主要用于发生 crash 时对数据进行 recovery。LSN是一个一直递增的整型数字,表示事务写入到日志的字节总量。

LSN 不仅只存在于重做日志中,在每个数据页头部也会有对应的 LSN 号,该 LSN 记录当前页最后一次修改的 LSN 号,用于在 recovery 时对比重做日志 LSN 号决定是否对该页进行恢复数据。

前面说的check point也是由 LSN 号记录的,LSN 号串联起一个事务开始到恢复的过程。


DB宕机后重启,InnoDB 会首先去查看数据页中的LSN的数值。这个值代表数据页被刷新回磁盘的 LSN 的大小。然后再去查看 redo log 的 LSN 的大小。

如果数据页中的 LSN 值大说明数据页领先于 redo log 刷新回磁盘,不需要进行恢复。反之需要从redo log中恢复数据。


如果将 innodb_flush_log_at_trx_commit 和 sync_binlog 参数设置成 1,前者表示每次事务的 redo log 都直接持久化到磁盘,后者表示每次事务的 binlog 都直接持久化到磁盘,可以双重保证 MySQL 异常重启之后的数据不会丢失。



第三段:立一个flag!

9,10月校招上岸!!!

【文章转东台网页制作公司 http://www.1234xp.com/dongtai.html 网络转载请说明出处】
上一篇:springboot整合redis,连接两个redis
下一篇:没有了
网友评论