【问题标题】:MySQL Custom replicationMySQL 自定义复制
【发布时间】:2016-01-04 13:14:18
【问题描述】:

我遇到了一个奇怪的场景,但我似乎找不到让它发挥作用的最佳方法。

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

所有公司在不同地点都有多家商店。 所有商店都需要使用同一个应用程序,同时必须同步数据。

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

传统的 MySQL 复制无法正常工作,因为它需要互联网连接才能保持运行。

我该怎么办???

拥有自己的软件解决方案来复制更高级别的数据是个好主意吗?如果是,我应该遵循哪些最佳做法?

我也不能使用 mysql auto_increment step 和 offset 来生成 ID,因为一些客户不断开设越来越多的商店。我是否需要为每个实体生成自己的 GUID,以确保 id 不会因商店唯一 ID (STOREID-UNIQUEID) 的前缀而发生冲突?

【问题讨论】:

    标签: mysql database replication database-replication multi-master-replication


    【解决方案1】:

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

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

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

    【讨论】:

    • 如何处理重复 ID、并发覆盖、冲突、int 溢出?它会弄乱你的数据库,你最终会得到脏数据。
    • 您通过不生成重复(例如 GUID)来处理重复的 ID。我不知道并发覆盖是什么意思,我假设您的客户彼此独立工作。整数溢出可以由更大的整数(或字符串/二进制)处理。
    • 如果每个客户有 1000 家商店,那么您将有巨大的差距。并发覆盖意味着 2 个存储尝试更新相同的数据。当两家商店都没有连接到互联网并进行不同的更改时,问题就来了。您将如何处理真实的变化?
    • 没有办法神奇地合并来自两个客户端的离线更改。您使用什么数据库(或其他工具)并不重要。如果您需要这样做,您将需要自己设计和实施合并规则。我不明白为什么在自动生成的数字中有差距是一个问题(GUID 根据定义有差距)。
    • 这是一个问题,因为每个商店每天都可以在单个表中生成记录任务。由于您在合并中提到的相同原因,复制可能不会为我完成工作。做额外的开发工作可能会更好。使用队列将新数据推送到主服务器听起来更好,并且可以解决大部分问题
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-11-28
    • 1970-01-01
    • 1970-01-01
    • 2014-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多