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家商店試圖更新相同的數據。兩家商店都沒有連接到互聯網並進行不同的更改時,就會出現問題。你要怎麼處理真正的變化? –