简单总结一下二进制日志和重做日志的区别
二进制日志(bin log):是mysql数据库级别的文件,不会记录select和show语句,主要用于恢复数据库和集群,配置参数为sync_binlog=N(表示每写缓冲多少次就同步一次磁盘),1表示同步方式写磁盘(写一次缓存即同步一次磁盘),默认为0,事务提交时会写磁盘(仅在事务提交前写磁盘)。有STATEMENT ROW MIXED三种格式。
重做日志(redo log):Innodb级别,用来记录Innodb存储引擎的事务日志,记录是物理页的变化,主线程每1s同步一次磁盘,用于数据恢复,保证事务的可靠性。
innodb_flush_log_at_trx_commit用来控日志刷新到磁盘的策略,默认为1,表示事务提交时必须调用一次fsync操作。设置为0表示事务提交时不进行写入重做日志操作,写入操作在master线程中完成(1s写一次),2表示事务提交时写入重做日志文件,但不调用fsync
注:重做日志写入时,先写入系统文件缓冲,为确保即时写入磁盘,需要调用fsync函数,同步到磁盘。
UndoLog:用来保证事务的一致性,对应于读已提交和可重复读级别下的MVCC,多版本Undo页,逻辑日志,也可用于事务回滚,存放在数据库内部的段中,称为undo段,位于共享表空间。
锁-->隔离性
redo log -->原型性 持久性
undo log -->一致性
Innodb与myisam的区别:
1 缓存机制
2 事务支持
3 锁定实现
4 数据存储方式