2013-01-11 46 views
0

讓我們說,我有兩個數據中心託管兩個MySQL數據庫實例。爲了獲得高可用性,我可以在這兩個實例之間實現主 - 主複製,以便兩個數據庫始終具有最新信息。但主 - 主複製帶來了自己的一系列問題,我試圖避免它。 在我的情況下,我知道數據的以下特徵 -MySQL複製:基於行?

如果用戶表有兩個記錄的鍵U1和U2,那麼U1將只在一個實例中更新。因此,給定記錄的寫入只能在一個實例中完成。所有我需要做的就是將這個記錄複製到其他實例,以便萬一我以後想讓另一個實例成爲主記錄時它具有最新記錄。 另外,有可能在某個時間點,實例1是U1的主設備,而在另一個時間點,實例2是U1的主設備。

我認爲這是真正的主控主複製下的一步,其中U1的寫入可以發生在任何兩個數據庫實例中。

鑑於此,有沒有更好的方法來實現這種情況下的複製。我想避免主 - 主複製,因爲將來我們可能擁有2個以上的數據中心,並且實施多主複製並不是直截了當的。

回答

0

這聽起來像你想要一個主從設置,然後在某些時候有能力推動從設備到主設備,並使其他服務器成爲新主設備的奴隸。

這是可能的,並記錄在案,請參閱:http://dev.mysql.com/doc/refman/5.0/en/replication-solutions-switch.html

+0

我不想爲用戶表中的所有行創建一個實例主服務器或從服務器。我想要做的是讓實例1成爲一組行的主人,實例2成爲用戶表中完全不相交的一組行的主人。 – user1935449

+0

哦,我明白了。是的,看看@praseodym寫了什麼,你說的是分片..你可能不想這樣做。幾乎總是有更好的擴展方法。 – hexist

1

您有效地描述sharded database,這是可能的,但不推薦,因爲它涉及到大的變化,以您的應用程序。缺點概述於another Stack Overflow post

MySQL集羣CGE軟件據說做transparent sharding,但它會產生額外的許可費用。

+0

是的,你是對的,從我的描述來看,現在我更多地思考它,聽起來很像分片。唯一的區別是,我更多地考慮動態分片,其中分片中的條目動態變化。所以碎片1現在可能對密鑰U1負責,但有可能在稍後的時間點,碎片2負責U1。 – user1935449

+0

這種昂貴的定期共享方式重新分片,但如果您在應用程序和數據庫之間使用額外的層來管理分片,那麼您確實可以動態地做到這一點。但是,這些缺點仍然適用(如使用... 4U服務器殺死蒼蠅等)。 – praseodym

0

如果您的意思是MySQL異步主 - 主複製不能很好地擴展到2節點以外,那麼這是正確的 - 但大部分其餘問題都很混亂。

雖然有可能看起來像是一個表,但它在2個數據庫服務器之間有效分區,這樣它們都具有100%的讀取訪問權限,但每個節點只能寫入數據庫中的特定行,那完全有可能但是在實踐中這將很難管理。它肯定比主控異步程序複雜得多 - 不簡單。

多主同步複製與異步複製具有非常不同的優點和缺點。就複雜性而言,恕我直言,它與MMA相提並論 - 如果您認爲它複雜得多,那麼您至少未能瞭解其中一項技術。

也許你需要的是聯合表和視圖。或者僅限本地和共享數據庫的組合。

在開始提出正確的問題之前,你仍然有一段旅程在前頭;您可能會更好地支付一些優質的諮詢服務費用,而不是將您的數據資產的未來投注在這裏。

+0

是的,我仍然試圖理解這個問題,並提出一些可能的解決方案。這將得到其他人的評價,所以我有限的知識不應該成爲一個問題。我想在此之前自己想出一些解決方案。如果您必須在3個節點之間進行主 - 主複製,您將選擇哪種複製技術? – user1935449

+0

絕對是多主複製。我也推薦Percona - 除了提供一些優秀的工具(其中大部分是開源的,所以你可以在沒有任何財務承諾的情況下與他們一起玩),他們還提供專業支持和諮詢服務 – symcbean