首先,二进制日志会记录所有与MySQL数据库有关的日志记录,包括InnoDB、MyISAM、Heap(memory除外)等其他存储引擎的日志。而InnoDB存储引擎的重做日志记录有关该引擎本身的事务日志。
其次,记录的内容不同。无论用户将二进制日志文件记录的格式设为STATEMENT还是ROW,又或是MIXED,其记录的都是关于一个事务的具体操作内容,即该日志是逻辑日志。而InnoDB存储引擎的重做日志是关于每个页(Page)的更改的物理情况。这基本上算是由于mysql的server和引擎各自独立实现的结果吧。
此外,写入的时间也不同。二进制日志文件仅在事务提交后进行写入,即只写磁盘一次,不论这时该事务多大。而在事务进行的过程中,却不断有重做日志条目(redo entry)被写入到重做日志文件中。
这两者的关系决定了mysql server crash之后,只会用到Innodb log,bin-log并没有什么用处,之于oracle而言,性质上bin-log中的内容相当于都已经是checkpoint之前的内容。所以bin-log不小心被删除也无所谓,不会影响recovery,但是Innodb_log则不行,可能会导致无法recovery的情况。