MySQL中有一个binlog的概念, 用于保存对数据库所作的修改, 这点上和Oracle的归档日志很接近, 但在原理上是很不一样的. 以InnoDB为例, InnoDB本身就有log文件, 和Oracle的联机日志一样, 用完了就重用, 但binlog并不是InnoDB的日志在重用前的拷贝, 而是另外写了一个文件. 因为binlog并不是专门为InnoDB设计的, 其他的存贮引挚如MyISAM也支持binlog, 它是MySQL备份及复制支持的重要基础, 因此不同于InnoDB的日志文件.

    如果MySQL用于很重要的系统, 需要事务支持, 并且要支持联机备份, 要保证没有数据丢失, 目前来说, 一般会用InnoDB存贮引挚, 并启用binlog, 为了保证事务的数据不丢失, 就得:

1, 在每次Commit时, 将修改写入InnoDB的日志文件
2, 在每次Commit时, 将修改写入binlog文件

    而在Oracle中只是保证写入到Oracle的联机日志就够了, 因此在性能测试中, 如果启用了binlog, 性能基本上下降了一半, 因为这中间要做两次写操作. 另外现在的版本中, 一个事务不能跨越binlog, 因此启用binlog的情况下, 就要少用大事务了. 查一下资料, 原来InnoDB也可以有Archived Log模式, 但在MySQL的手册中找到这样一段话, 好象功能已经过时了?

innodb_log_archive

Whether to log InnoDB archive files. This variable is present for historical reasons, but is unused. Recovery from a backup is done by MySQL using its own log files, so there is no need to archive InnoDB log files. The default for this variable is 0.

    过多的功能支持, 必然会造成衔接的松散, 从儿得不到最大化的性能. 理论上来说不够安全的成组提交是MySQL的亮点, Oracle10g好象也有这个功能的, 只不过默认情况下是关闭的.

    从这个结构来看, MySQL不太适合用于很重要的数据, 如财务数据等.