我有一个非常简单的mysql master-> slave设置在两台服务器之间进行。 问题是,复制是asynchronous的,如果主服务器在COMMIT之后崩溃,则从属服务器的复制线程能够获取最后一个bin日志,这可能会导致问题(甚至在低延迟链接上)。
有没有办法强制MySQL做同步提交,以保证数据的一致性是在一个mysql->从属关系?
正常的MySQL复制必须是asynchronous的,没有分布式的锁,并且主机永远不会被阻塞等待从机。 这有利有弊。
DRBD +心跳是标准解决scheme,以避免在主站永久丢失的情况下丢失数据。
您可以在正常复制下使用DRBD +心跳,这样可以实现读取扩展或副本离站以及非常高的耐用性。
由于DRBD在块级进行同步复制,因此您需要networking具有非常低的延迟以获得良好的性能(如果性能要求非常高,自定义低延迟互连性能更好)。
MySQL 5.5有半同步复制。 基本上它保证至less有一个从机在提交之前收到了这个事务。
http://dev.mysql.com/doc/refman/5.5/en/replication-semisync.html
MySQL Cluster提供了同步复制function,但引擎(NDBCLUSTER)不适用于很多用例。
Continuent有一个同步复制解决scheme(红杉),但它不是积极开发了。
事实上的标准是DRBD +心跳,但它是不平凡的设置。
干杯