两种方式,在MySQL中进行多站点复制

我们在5个独立的位置有MySQL 5.1数据库,我们需要尽可能保持同步。 每个办公室都需要从该办公室的本地服务器读写数据,但是我需要每个办公室的数据库来反映在所有办事处所做的更改。 数据更改仅在典型的9-5个办公时间内进行,WAN速度较慢(1-5 Mbps)。

我无法将所有站点的写入转到单个主站,我从文档和其他Q&A的理解是,主站 – 主站复制不适合这种情况,并可能导致数据丢失。

这是我倾向于采取的方法:

有没有比这种手动方法更好的方法,还是有更好的方法来手动? 我是否缺less有关多主复制的内容? 这远非理想,但至less让我们在每天的开始时同步。 我会欢迎任何build议。

谢谢。

如果采用这种方法,那么对速度的潜在折中可能是对新logging和脏logging使用标志(new可以是INSERT行的缺省值,dirty可以通过UPDATE触发来设置),但取决于工作stream和审计需求。 而不是在一天中复制所有重复的更改logging,只有最后的值会更新所有其他系统,然后标志将被清除。 你仍然需要一张表来删除(除非你想用这个非常stream行的“deleted_on”时间戳,并且可能改变你的所有代码)。 如果一旦写入logging没有太大变化,你就不会从中得到很多。

尽pipe如此,这将需要服务器在一天结束。 通过审计表,您可以在发生数据库故障的情况下将审计表定期写入其他位置的文件(而不仅仅是在一天结束时)。

Galera是一个同步的多主解决scheme,你可能想看看。 我自己并不是很了解这些,认为它很深奥,但这可能是你想要更仔细地看的东西。

干杯

根据应用程序的不同,有些事情与复制有冲突,即auto_increment键插入之间的冲突。

复制将工作,循环或明星,它只会传输需要写入的操作。 如果它接收到一个已经处理的写入数据包,它将忽略它。 由于站点之间的带宽较低,如果不存在冲突问题,则可以在工作时间内停止从复制,以节省带宽并在一天结束时启动。 如果你的代码没有意识到它正在进行更新,那么当一个从站停止出现错误并且需要关注的时候,你可能最终会遇到很多次。

如果您有足够的空间,您可以将每个远程办公室的auto_increment起始值设置得足够远,以避免相互溢出。

复制对于您的情况并不理想,而且由于您的系统并不真正意识到正在进行复制,所以您可能会遇到一些问题,但这可能会奏效。