我在两台服务器之间进行了一个非常简单的 mysql master->slave 设置。问题是,复制是异步的,如果主服务器在来自从属的复制线程能够获取最后一个 bin 日志之前在 COMMIT 之后崩溃,这可能会导致问题(即使在低延迟链接上)。
是否有强制 mysql 进行同步提交以便在 mysql->slave 关系中保证数据一致性?
我在两台服务器之间进行了一个非常简单的 mysql master->slave 设置。问题是,复制是异步的,如果主服务器在来自从属的复制线程能够获取最后一个 bin 日志之前在 COMMIT 之后崩溃,这可能会导致问题(即使在低延迟链接上)。
是否有强制 mysql 进行同步提交以便在 mysql->slave 关系中保证数据一致性?
MySQL 5.5 具有半同步复制。基本上,它保证在提交之前至少有一个从站已经接收到该事务。
http://dev.mysql.com/doc/refman/5.5/en/replication-semisync.html
正常的 MySQL 复制必然是异步的,没有分布式锁,主服务器永远不会阻塞等待从服务器。这有优点也有缺点。
DRBD + heartbeat 是在master永久丢失的情况下避免数据丢失的标准方案。
您可以在正常复制下使用 DRBD + heartbeat,这允许读取扩展或异地复制以及非常高的持久性。
由于 DRBD 在块级别进行同步复制,因此您需要网络具有非常低的延迟才能获得良好的性能(gigE 可以,如果您有非常高的性能要求,自定义低延迟互连会更好)。
MySQL Cluster 提供同步复制,但引擎(NDBCLUSTER)不适合很多用例。
Continuent 有一个同步复制解决方案(Sequoia),但它不再积极开发。
事实上的标准是 DRBD + Heartbeat,但设置起来并不简单。
干杯