cnx丢失后群集mysql服务器重新同步
我们正在创建一个应用程序,其中将有一个主服务器,但我们的客户端在办公室中也将有一个服务器,这可能会丢失与主服务器的连接。我们正在研究如何配置MySQL,以便1)正常地通过internet向主机写入数据,而从机只是被动地向下拉2)如果与internet/外部世界的连接丢失,则在具有访问权限的办公室的本地服务器上进行读写,3)当连接恢复时,同步完成,工作完美无瑕 一个小问题是,可能有2或3个这样的从属服务器,因此同步必须足够健壮,可以用于多个服务器 假设在网络连接中断之前,有三台服务器的联系人表有100条记录。在最复杂的场景中,将在所有3个位置添加一条新记录。重新连接过程将识别未同步的记录,完成此过程后,每个表将有103条记录,主键将重新排序 再加上外键的层叠更新——关于这方面的正确方向有什么建议吗?我正在考虑为此编写一个PHP例程,但不想重新发明轮子cnx丢失后群集mysql服务器重新同步,mysql,sql,synchronization,Mysql,Sql,Synchronization,我们正在创建一个应用程序,其中将有一个主服务器,但我们的客户端在办公室中也将有一个服务器,这可能会丢失与主服务器的连接。我们正在研究如何配置MySQL,以便1)正常地通过internet向主机写入数据,而从机只是被动地向下拉2)如果与internet/外部世界的连接丢失,则在具有访问权限的办公室的本地服务器上进行读写,3)当连接恢复时,同步完成,工作完美无瑕 一个小问题是,可能有2或3个这样的从属服务器,因此同步必须足够健壮,可以用于多个服务器 假设在网络连接中断之前,有三台服务器的联系人表有1
谢谢 这将是一个非常难以设计、测试和维护的体系结构。我强烈建议您重新考虑您的设计是否需要分区容差(特别是允许写入未连接到主机的数据库的能力) 如果这是绝对必要的,您需要处理的几个问题包括:
- 您需要完全停止使用
主键,因为在拆分后几乎不可能安全地同步它们,因为同一个键可能已被多个服务器使用,并且该键可能存在于事后无法更新的位置(例如,在URL中!)。通过使用每个服务器的偏移量生成主键(例如,服务器A使用IDAUTO_INCREMENT
,100
,200
,服务器B使用300
,101
,201
,等等),或者通过使用GUID主键生成主键,这样就不会发生冲突 请注意,GUID主键对MySQL服务器性能有明显的负面影响,因为它们会将索引弄得一团糟。小心行事301
- 如果您认为将更新同步到数据库很困难,那么通过比较,处理更新和删除会使这看起来很容易。一种解决方法是完全避免更新和删除—将每个表视为“日志”,在对象状态每次更改时(包括删除时)插入新行,并将标识符的最近一行视为“当前状态”。这将使数据库上的任何类型的关系操作基本上不可能(因为在这样的表上执行任何类型的有用连接都是非常困难的!),但它至少会简化同步任务 如果不可能的话,形势开始变得相当严峻。在网络未完全连接时,您可能需要维护所有更改的日志,并在每次服务器重新连接时协调这些日志。这可能无法很好地扩展 请记住,任何自动冲突解决方案都可能导致某些数据丢失或意外结果。特别是,如果记录的单个字段由网络拆分的双方更新,您的同步工具将需要选择一个新值来“赢”,或者以某种方式合并这些值。根据字段是什么以及它代表什么,这可能非常困难,甚至不可能。(对于一个特别糟糕的例子,考虑如果一个字段代表一个用户的银行帐户余额,并且一个更新的一个更新在同步中丢失会发生什么)
- 本质上说,如果没有折衷,就不可能有一个容错系统
- ,这是一种将更改同步到分布式系统中单个对象的方法
- ,这将减轻您调试此系统的痛苦