1. 对数据库进行DML语句(insert,update,delete,create)等等操作,那么数据库服务端执行的时候就会涉及到 redo log(重做日志) 和 binlog(归档日志) 两个日志文件的变动。
  2. 数据库的数据更新使用一种叫做WAL(Write-Ahead Logging)的技术,就是先写日志,再写磁盘;这么做的作用有两点,第一是保证数据写入的原子性和持久性,既在磁盘写入过程中出现断电的情况,数据库也可以根据日志来进行恢复工作。第二是写日志是顺序写入的,要比写磁盘随机写入快;等到存储引擎空闲时会将日志中的操作条目写入磁盘。
  3. 日志之所以能在断电后还有该条目是因为日志也是写在磁盘上。
  4. 如有数据写入操作:

    • server层解析sql后通过执行器调用存储引擎。
    • 引擎先将这条这条数据更新到内存中,同时将更新日志写入redo log中,此时redo log的状态处于prepare状态。然后告知执行器执行完成了,随时可以提交事务
    • 执行器将操作写入binlog,并将binlog写入磁盘。
    • 执行器调用引擎的提交事务接口,引擎把刚刚写入的redo log的状态改为commit状态,完成此次更新。
  5. redo log是物理log,既数据库实际哪一行修改成什么样,bin log是逻辑log,既进行了一条怎么的逻辑操作。redo log可用于故障恢复,bin log可用于数据库备份恢复。
  6. 两次提交是为了保证redo log 和binlog的一致性

牛刀杀鸡
3 声望0 粉丝