我们有MySQL 5.1数据库在5个不同的地点,我们需要保持尽可能的同步。每个办事处都需要从/写到该办公室的本地服务器,但我需要每个办事处的DB来反映所有办公室所做的更改。只有在典型的9-5小时办公时间内才会对数据进行更改,而广域网的速度很慢(1-5 Mbps)。
我不能让所有站点的文章都放在一个主目录中,我从文档和其他Qs&在这里中了解到,主主复制不适合这种情况,很可能会导致数据丢失。
下面是我倾向于采取的方法:
有比这种手动方法更好的方法吗?还是有更好的手动方法?我是不是遗漏了一些关于多主复制的东西?这远非理想,但它至少让我们每天开始同步。我欢迎任何建议。
谢谢。
发布于 2010-10-20 21:12:21
如果您要使用这种方法,速度的一个潜在的权衡可能是对新记录和脏记录使用标志(对于INSERTed行,new可能是默认的,脏的可以在更新时通过触发器设置),但取决于工作流和审核需求。与其在一天内复制对记录的所有重复更改,不如在所有其他系统上更新最后的值,然后清除标志。您仍然需要一个删除表(除非您想使用一直流行的"deleted_on“时间戳,并且可能会更改所有代码)。如果记录一旦写下来不会有太大的变化,你就不会从中得到很多。
不过,这需要服务器在一天结束时启动。使用审计表,在DB失败时,您可以定期(而不是仅仅在一天结束时)将审计表写入其他某个文件。
发布于 2010-10-20 22:25:04
加雷拉是一个同步的多主解决方案,您可能需要研究它。我自己并不是很了解它,我认为它是深奥的,但它可能是你想要看得更仔细的东西。
干杯
发布于 2010-10-20 22:43:37
根据应用程序的不同,有些东西会与复制中断,即auto_increment密钥插入之间的冲突。
复制将工作,圆形或星形,它将只传输需要写入的操作。如果它收到一个已经处理过的写包,它就会忽略它。由于站点之间的带宽很低,如果没有冲突问题,您可以在工作时间停止从复制,以节省带宽,并在一天结束时启动它。如果您的代码没有意识到它正在进行更新,那么当一个从站停止了一个错误并需要被处理时,您可能会有很多次。
如果您有足够的空间,您可以为每个远程办公室设置您的auto_increment启动值,使它们之间的距离足够远,这样它们就不会彼此溢出。
复制对于您的情况并不理想,而且由于您的系统并不真正意识到正在发生复制,您可能会遇到一些问题,但是,它可能工作得很好。
https://serverfault.com/questions/193112
复制相似问题