bin log&redo log&undo log

bin log

  • bin log存储的是insert/delete/update的sql语句;
  • 主要功能是复制和恢复,主服务器和从服务器需要保持数据一致,可以通过bin log来同步数据;
  • 如果数据库的所有数据都被删除,可以通过bin log来进行恢复,bin log存储的是对所有数据的修改记录。
  • bin log是所有sql都有的,不管用的是什么存储引擎;
  • bin log在事务提交后才记录。

redo log

  • 存储的是数据的物理变化,比如:在xxx页修改xxx;
  • redo log是为持久化而生,事务中的四大特性中持久性就是由redo log来实现的,当数据写完内存后,如果在刷新到磁盘的过程中,数据库挂了,可以通过redo log来恢复内存中还未刷新的数据;
  • redo log是InnoDB存储引擎产生的;
  • redo log在事务一开始执行就开始记录。

bin log和redo log的实现细节

数据库会保证这两者的一致性,如果bin log失败,redo log成功,那从服务器就不能从主服务器得到最新数据;如果bin log成功,redo log失败,那从服务器可以得到最新数据,但是如果在写磁盘时,数据库挂了,那主服务器就无法恢复,所以一定要保证bin log和redo log的一致性,有两个阶段:

  • InnoDB redo log写盘,事务处于prepare状态;
  • InnoDB bin log写盘,事务处于commit状态。
  • 每个事务在bin log的末尾,都会生成一个XID event,来标志事务是否提交成功,也就是说,在每次恢复过程中,bin log的最后一个 XID event之后的内容都会purge。

undo log

  • undo log的作用是回滚和MVCC(并发控制);
  • 在对事务进行更新的时候,不仅会记录redo log,还会记录undo log,undo log 记录的也是一系列的逻辑操作,而且是相反的操作,比如操作时insert,那就在undo log中记成delete,如果事务失败,那就用undo log来进行回滚;
  • undo log中记录的修改前的记录,也就是前版本,MVCC要求是写读不阻塞,所以在读的时候,就返回undo log中的记录。

什么是主从复制

将主数据库的DDL和DML操作,通过二进制日志bin log发送到从数据库中,然后从数据库再根据这些日志从新执行,以达到从数据库和主数据库的数据保持一致。

主从复制的原理

  • 主数据库在事务提交更新时将数据变更保存到bin log中;
  • 主数据库再将bin log中的日志推送到中继日志 relay log 中,然后从数据库再根据relay log中的记录再从做数据变更操作,通过逻辑复制来保持跟主数据库的数据一致;
  • 当从数据库启动复制时,会启动IO线程跟主数据库建立连接,然后主数据库启动bin log Dump线程去获取数据库事件并返回给IO线程,IO线程将事件读取到relay log中,从数据库再启动sql线程去读取relay log 中的事件并应用。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值