0

我有一个奇怪的场景,我似乎无法找到使其工作的最佳方式。MySQL自定义复制

我有一个库存应用程序存储在Linode服务器上。这个程序处理不同的公司。每家公司都有自己的数据库。

所有公司都有多个商店位于不同的位置。 所有商店都需要使用相同的应用程序,同时数据必须同步。

我需要复制数据,但所有商店/应用程序都需要能够同时写入/读取和复制。问题是,他们中的大多数几个小时都没有互联网连接。他们完全脱离了世界(只是局域网)。

传统的MySQL复制不会起作用,因为它需要互联网连接才能保持运行。

我该怎么做?

有我自己的软件解决方案,在更高层次上复制数据是一个好主意吗?如果是的话,我应该遵循哪些最佳做法?

我也不能使用mysql auto_increment步骤和偏移ID生成,因为一些客户不断打开越来越多的商店。我是否需要为每个实体生成自己的GUID,以确保ID不会通过在商店唯一标识(STOREID-UNIQUEID)前添加前缀来冲突?

回答

1

只要在正常运行时间内有足够的时间,带宽和磁盘空间来下载日志,MySQL的复制应该能够处理网络停机。

我不确定自动重新连接手柄如何延长停机时间,但您应该能够使用重新启动复制的计划作业解决重新连接问题。

GUID是多站点密钥生成的好选择。另一种选择是使用站点(客户端)标识符以及PK的自动增量。

+0

你如何处理重复的ID,并发重写,冲突,int溢出?它可能会弄乱你的数据库,并且你最终会得到脏数据。 –

+0

您通过不生成重复项(例如GUID)来处理重复的ID。我不知道并发覆盖是什么意思,我假设你的客户是独立工作的。 Int溢出可以通过更大的整数(或字符串/二进制)来处理。 – Vatev

+0

如果您为每个客户有1000个商店,那么您将有巨大的差距。并发覆盖意味着2家商店试图更新相同的数据。两家商店都没有连接到互联网并进行不同的更改时,就会出现问题。你要怎么处理真正的变化? –