首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MySQL中的双向多站点复制

MySQL中的双向多站点复制
EN

Server Fault用户
提问于 2010-10-20 19:45:33
回答 3查看 2.1K关注 0票数 0

我们有MySQL 5.1数据库在5个不同的地点,我们需要保持尽可能的同步。每个办事处都需要从/写到该办公室的本地服务器,但我需要每个办事处的DB来反映所有办公室所做的更改。只有在典型的9-5小时办公时间内才会对数据进行更改,而广域网的速度很慢(1-5 Mbps)。

我不能让所有站点的文章都放在一个主目录中,我从文档和其他Qs&在这里中了解到,主主复制不适合这种情况,很可能会导致数据丢失。

下面是我倾向于采取的方法:

  • 设置触发器来审核插入、更新(仅更改字段)和删除,并在一天结束时将这些内容写入一个位置。
  • 每个办公室每晚都会运行一项作业,下载所有办公室的整个审计日志,并根据审计跟踪时间戳编写最新的更改--这是一种简单的方法,但我们没有太多的约束需要担心,使用该数据的应用程序为新记录创建了GUID,因此无需担心自动增量。

有比这种手动方法更好的方法吗?还是有更好的手动方法?我是不是遗漏了一些关于多主复制的东西?这远非理想,但它至少让我们每天开始同步。我欢迎任何建议。

谢谢。

EN

回答 3

Server Fault用户

回答已采纳

发布于 2010-10-20 21:12:21

如果您要使用这种方法,速度的一个潜在的权衡可能是对新记录和脏记录使用标志(对于INSERTed行,new可能是默认的,脏的可以在更新时通过触发器设置),但取决于工作流和审核需求。与其在一天内复制对记录的所有重复更改,不如在所有其他系统上更新最后的值,然后清除标志。您仍然需要一个删除表(除非您想使用一直流行的"deleted_on“时间戳,并且可能会更改所有代码)。如果记录一旦写下来不会有太大的变化,你就不会从中得到很多。

不过,这需要服务器在一天结束时启动。使用审计表,在DB失败时,您可以定期(而不是仅仅在一天结束时)将审计表写入其他某个文件。

票数 1
EN

Server Fault用户

发布于 2010-10-20 22:25:04

加雷拉是一个同步的多主解决方案,您可能需要研究它。我自己并不是很了解它,我认为它是深奥的,但它可能是你想要看得更仔细的东西。

干杯

票数 1
EN

Server Fault用户

发布于 2010-10-20 22:43:37

根据应用程序的不同,有些东西会与复制中断,即auto_increment密钥插入之间的冲突。

复制将工作,圆形或星形,它将只传输需要写入的操作。如果它收到一个已经处理过的写包,它就会忽略它。由于站点之间的带宽很低,如果没有冲突问题,您可以在工作时间停止从复制,以节省带宽,并在一天结束时启动它。如果您的代码没有意识到它正在进行更新,那么当一个从站停止了一个错误并需要被处理时,您可能会有很多次。

如果您有足够的空间,您可以为每个远程办公室设置您的auto_increment启动值,使它们之间的距离足够远,这样它们就不会彼此溢出。

复制对于您的情况并不理想,而且由于您的系统并不真正意识到正在发生复制,您可能会遇到一些问题,但是,它可能工作得很好。

票数 0
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/193112

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档