2011-08-06 52 views
5

我期待澄清一点混乱。我有一个主控+从属设置。我有一个主人和三个奴隶。所有写入(INSERT|UPDATE|DELETE)去主。所有的读数(SELECT)都会随机选择一个奴隶。我所有的表都使用InnoDB存储引擎。交易和主+从复制

我很好奇MySQL/InnoDB如何处理这个设置中的事务。如果MySQL将事务中的每个更改写入二进制日志,那么一切都应该没问题。但是,如果在事务提交之前binlog没有写入,我可以看到存在一些大问题。

任何人都可以解释在复制到位事务处理期间MySQL中发生了什么?

回答

0

一般来说,如果一个事务没有写入二进制日志,直到它被提交。假设表是事务性的,事务中的所有语句都被组合成一个BEGIN \ COMMIT语句。

0

根据this,从站只能在事务提交后才能看到更改。

在主服务器上失败的事务根本不影响复制。 MySQL复制基于MySQL写入修改数据的SQL语句的二进制日志。失败的事务(例如,由于外键违规或因为它被回退)不会写入二进制日志,因此它不会发送到从属设备。

而且this证实:

二进制日志是碰撞安全的。只有完整的事件或事务被记录或回读。