MySQL中binlog和redo log的一致性问题
本人目前在从事MySQL内核的开发和维护工作,以后会写一些MySQL的知识分享。
关于MySQL中binlog和redo log的一致性问题,在网上看过一些文章,感觉不是特别清楚,所以自己总结后和大家分享一下,文章如有问题,欢迎指教。
redo log 和 binlog
redo log
在MySQL InnoDB中,redo log是用来实现事务的持久性,即当事务在提交时,必须先将该事务的所有操作日志写到磁盘上的 redo log file进行持久化,这也就是我们常说的 Write Ahead Log 策略。有了redo log,在数据库发生宕机时,即使内存中的数据还没来得及持久化到磁盘上,我们也可以通过redo log完成数据的恢复,这样就避免了数据的丢失。
binlog
在MySQL中,binlog记录了数据库系统所有的更新操作,主要是用来实现数据恢复和主从复制的。一方面,主从配置的MySQL集群可以利用binlog将主库中的更新操作传递到从库中,以此来实现主从数据的一致性;另一方面,数据库还可以利用binlog来进行数据的恢复。
redo log 和 binlog的区别
- redo log和binlog的产生方式不同。redo log是在物理存储引擎层产生,而binlog是在MySQL数据库的Server层产生的,并且binlog不仅针对InnoDB存储