2013-02-11 117 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消息,重建關係並相應地將它們插入到「遠程」數據庫中。