2011-11-27 11 views
0

我正在兩臺不同的計算機上使用同一個數據庫,並且需要保持它們的同步。如何合併使用轉儲文件創建的同一表的不同版本

當我完成一臺計算機上工作,我創建該點的數據庫的轉儲文件,所以我可以用指令將其導入其他:

mysqldump -u username -p DataBaseName TableName > Table.dump 

我的問題是,當我插入的元素有些表可能會發生這樣的情況,即他們的主鍵已經分配給我另一臺計算機上數據庫的同一個表的一個元素。

我想知道如何在我創建的轉儲文件中插入我在How can I merge two MySQL tables?中找到的指令,以便爲重複的條目分配新的主鍵值,而不會丟失表中的數據。

我想避免創建轉儲文件的行爲,這將完全刪除感興趣的表的前一版本,引如下:

DROP TABLE IF EXISTS `TableName`; 
CREATE TABLE `TableName` (
    ... 
) ENGINE=MyISAM AUTO_INCREMENT=6512 DEFAULT CHARSET=utf8; 
+0

請幫助,這是非常重要的... – Matteo

回答

0

你可以考慮使用的GUID作爲主鍵(通過函數uuid)。那樣的話,你不會發生衝突。

任何涉及重新映射衝突的主鍵的方案都可能會導致問題,因爲如果數據以相反的方向被複制(因爲您將在原始數據庫中獲得兩個數據副本,舊的和新的主數據庫鍵)。另外,如果主鍵足夠無意義以至於可以重新映射(例如,如果它沒有從其他鏈接表中引用),那麼考慮是否需要主鍵。

+0

我不能很好地理解你的意思,請你多一點解釋我?認爲我需要保持的PK。 – Matteo

+0

如果您使用GUID作爲主鍵,則創建的每條記錄都將獲得唯一的主鍵,而不管您在哪臺機器上創建記錄。這樣,當你合併時你不會碰到衝突。 –

1

作爲一種替代方法,您可以使用MySQL的增量和偏移量設置,這些設置通常用於自動主複製,以便在沒有執行mysqldump的情況下同步數據。或者如果適用於您的情況,您實際上可以設置主控以複製主控。

在服務器A上,使用以下設置:

auto-increment-offset=1 
auto-increment-increment=2 

在服務器B上,使用下面的設置:

auto-increment-offset=2 
auto-increment-increment=2 

這裏是一個指南,講述了主掌握複製設置: Dual-Master MySQL 5 Replication Done Right

相關問題