RedoLog日志和Binlog日志哪个先写的问题?
前言
MySQL中六种日志文件,分别是重做日志(redo log)、回滚日志(undo log)、二进制日志(binlog)、错误日志(errorlog)、慢查询日志(slow query log)、一般查询日志(general log)、中继日志(relay log).其中重做日志和回滚日志与事务操作息息相关,二进制日志与事务操作有一定的关系,这三种日志,对理解MySQL的事务操作有着重要的意义。
首先我们知道在MySQL中,二进制日志(binlog)是server层的,主要用来做主从复制和即时点恢复时使用的。而事务日志(redolog)是InnoDB存储引擎层的,用来保证事务安全的。你可能会有这样的疑问。
- 1.为什么MySQL有binlog,还有redo log?
- 2.事务是如何提交的?事务提交先写binlog还是redo log? 如何保证这两部分的日志做到顺序一致性?
- 3.为了保障主从复制安全,故障恢复是如何做的?
- 4.为什么需要保证二进制日志的写入顺序和InnoDB层事务提交顺序一致性呢?
简单总结二者关系:
- 1.redolog用来恢复当前及其上的存储引擎中的数据,例如innodb
- 2.binlog用来做复制同步的,让别的机器上的实例进行数据库操作
1.为什么MySQL有binlog,还有redo log?
这个是因为MySQL体系结构的原因,MySQL是多存储引擎的,不管使用哪种存储引擎,都会有binlog,而不一定有redolog,简单地说,binlog是MySQL Server层的,redo log是InnoDB层的。
- redolog
在MySQL InnoDB中,redo log是用来实现事务的是就行,即当事务在提交时,必须先将该事务的所有操作日志写到磁盘上的redo log file进行持久化,这也就是我们常说的Write Ahead Log策略。有了redo log,在数据库发生宕机时,即时内存中的数据还没来得及持久化到磁盘上,我们也可以通过redo log完成数据的恢复,这样就避免了数据的丢失 - binlog
在MySQL中,binlog记录了数据库系统所有的更新操作,主要是用来实现数据恢复和主从复制的。一方面,主从配置的MySQL集群可以利用binlog将主库中的更新操作传