2013-02-11 119 views
1

我的问题:Mysql的同步关系数据库

我怎么能同步2个MySQL数据库(离线本地数据库与主联机数据库)?

问题是数据库的关系,和ID始终是汽车incremenate,所以如果我只是使用同步插入它会惹我referals。

这对于诊所管理程序,我提出,问题是目前其 服务器上,但有时互联网连接出现了我的用户/慢 诊所,所以我需要让他在离线模式下工作(存储每一件事 到本地数据库),并在一天结束时手动与远程数据库 同步(双向)。 所以基本上每个诊所应该有自己的本地数据库,并让他们全部同步到中央数据库

表的示例。

db.Cental.users

|id|user|clinic | 
|01|demo|day care| 
|02|nurs|er  | 
|03|demX|day care| 

db.day care.users

|id|user|clinic | 
|01|demo|day care| 
|02|demX|day care| 

(注释ID犯规一定中央和本地分贝之间匹配,但在两个分贝的结构相同)

例如: my main database is more complex than this one, but that should do as an example

数据库信息:

  1. 每个用户都有很多访问,插件。

  2. 每次访问包含1USER如patient_id,和1USER作为doctor_id

  3. 每个插件具有一个用户,许多输入

  4. plugin_inputs具有一个插件

我有2个数据库1服务器和其他本地托管的 - 用于离线模式 -

我想要的是能够同步本地数据库与在线一,但因为我有超过1个用户,多个本地数据库,所以每个人将有几乎相同的ID,而在线数据库应该包含所有他们合并。

那么我该如何同步它们呢?

我用户的PHP/MySQL(在线)/ SQLite的(本地)

+0

这不是PHP的问题,它是一个MySQL问题。保留2个表格/数据库然后再合并它们并且更麻烦是一个坏主意。也许您应该使用单个数据库,然后更改您的应用程序设置以使用该数据库服务器。 – Husman 2013-02-11 13:10:13

+0

@Husman php:incase我需要使用一些代码来同步它们..原因为什么我必须用户2数据库是本地数据库在离线模式下工作,并且用户在互联网回来时同步它。作为备份,所以他可以从任何地方访问它。 – Zalaboza 2013-02-11 13:14:48

+0

您需要迭代本地机器上的所有记录,然后为每个记录(我建议将其导出为CSV或XML/json文件),您需要检查它是否存在于联机数据库中,并且然后将其作为新记录插入。当在线数据库使用不多时(即深夜),这是最好的。将其导出为xml/json/csv文件的原因是允许进行批处理,并且使用结构化数据格式编码变得更简单。希望有所帮助。 – Husman 2013-02-11 13:19:21

回答

1

有一对夫妇的事情可以做。

首先,你可以考虑为用户表中的复合主键 - 例如,你可以有“诊所”在主键。这样,即使自动增量值重叠,您也可以始终唯一标识用户。

“访问”表然后需要在外键中包含patient_clinic和doctor_clinic。您可以简单地设置每个诊所的自动增量字段以不同的数字开始:ALTER TABLE user AUTO_INCREMENT = 10000;将设置用户表的第一个auto_increment为10000;如果下一个诊所将其设置为20000(或其他),则可避免重叠(直到您超过该幻数,这就是为什么它很脏)。

1

我会忍不住重新设计应用程序体系结构有在“远程”结束的API,并运行在每一天在“本地”末结束工作后所有的“本地”数据“远程”API。

这样你可以有“本地”的工作创造一个类似的JSON消息:

{ user_visit: 
    { 
     user_id: 1, 
     doctor_id: 1, 
     plugins: [ 
      { 
      plugin_name: name, 
      data: { 
       data_field1: "VALUE", 
       data_field2: "VALUE2", 
       data_fieldxx: "VALUExx" 
      } 

     ] 
    } 
} 

和发送的每条消息的API。在API中,您将遍历JSON消息,重建关系并相应地将它们插入到“远程”数据库中。