一.MySQL如何保证事务的一致性?
两阶段锁:
prepare阶段:
1.写入redo log (prepare)
2.通知server准备写入binlog
commit阶段:
1.写入binlog
2.提交redo log
二.有了binlog为什么还要记录redo log?
binlog和redo log虽然都是为了数据安全与恢复准备的,但是他们的侧重点和功能有所不同,
bin log记录的是SQL语句,属于逻辑日志,可以在所有存储引擎上运行,主要目标是为了数据备份与复制;
redo log记录的是具体的物理操作,属于物理日志,只能在innoDB引擎上使用,执行速度快,主要目标是为了保证高可用性。
三.典型的事务操作流程?
server接收更新数据请求
innoDB记录undo log
更新BufferPool
记录redo log(prepare)
记录binlog
提交redo log (commit)
四.undo log,redo log和binlog的对比?
undo log:innoDB引擎层,事务开始前的值(旧值),事务回滚,事务开始前;
redo log:InnoDB层,事务提交后数据,宕机恢复,事务执行中;
bin log:server层,SQL语句,主从复制和备份,事务提交时。
五.MySQL数据库结构?
server层:
连接器
解析器
优化器
执行器
bin buffer
存储引擎层:
统一接口,
存储引擎:
内存:
bufferpool:
undo log buffer
change buffer
redo log buffer
磁盘:
undo log
redo log
bin log