2014-01-07 137 views
0

任何人都可以想到在服務器啓動之前將mysql數據庫與另一個mysql數據庫同步的好方法嗎?我想也許我可以rsync在rc.d中的目錄,但這似乎很危險。服務器在FreeBSD上運行。MySQL系統啓動同步

謝謝。

澄清:

好的。我將mysql設置爲一個php web應用程序的會話存儲。我寫了一個類來覆蓋php的會話方法,這些方法提供了對我們的web應用程序非常重要的好處。爲了達到最高速度,主mysql服務器將其數據存儲在tmpfs分區中。它使用SSD複製到服務器。

如果發生故障,我的會話管理類將自動轉移到從服務器,但是當主服務器重啓並且mysql服務啓動時,會話請求將被重定向到該服務器,但不會有數據存在。 Ergo,我需要在主機的啓動順序中從主機獲取數據。

+1

你有沒有想過使用主從複製? – gipinani

+0

當你在服務器啓動之前說「*」時,假定你指的是MySQL守護進程,而不是它運行的機器 - 但是,你指的是接收服務器,發送服務器或兩者?你能否提供更多關於你的理由的信息,要求數據庫在服務器啓動之前同步* – eggyal

+0

@mserioli:這隻會在兩臺服務器啓動後同步*,不是? – eggyal

回答

1

如果兩個MySQL服務器已關閉:rsync -ing的datadir(我假設是rc.d沒有,因爲這將是不可思議?)盯着他們倆之前是沒有問題的,而且只要工作正常的新服務器上的mysql版本更高或相同(您可能需要在更高版本上運行mysql_upgrade)。

如果第一個正在運行,您最好想要一個主從方案,從hotcopy開始。使用Percona的Xtrabackup,您可以備份包含InnoDB表的實時數據庫,儘可能少的鎖定(但仍會發生一些鎖定!),則將該數據庫複製到新服務器。現在,它可以「同步」,但第一臺服務器仍在運行,所以數據不斷變化。要使其與xtrabackup_binlog_info文件中存儲的位置set it up as a slave再次同步。

+1

D'ohh你打我30秒! –

+1

哈,得分! :P愛SQL反模式順便說一句:) – Wrikken

+0

我也從SQL反模式得到了很多的使用。我甚至沒有注意到你的名字。現在我感覺自己就像是一位名人,因爲你對我的問題發表了評論。當我在rc.d中說過的時候,我的意思是在啓動時運行的shell腳本中,位於rc.d中。 – user1119648

1

是的,如果mysqld守護進程關閉,您可以rsync數據目錄到另一個位置。源服務器和目標服務器都應該關閉它們的mysql守護進程。

這是不安全進行rsync運行mysqld的實例的數據目錄,也沒有將其複製到正在運行的mysqld實例。這是因爲在任何時候,部分數據仍可能在內存中,尚未寫入磁盤。如果你只使用rsync來複制它,你會得到一個不完整的數據庫,並且幾乎可以保證破壞它。

另一種選擇是使用Percona XtraBackup,它執行數據的快速在線物理副本。它包括一種通過網絡發送輸出的模式,因此您可以立即使用它來初始化新的服務器。

有關執行流式備份的示例,請參閱http://www.percona.com/doc/percona-xtrabackup/2.1/howtos/recipes_ibkx_stream.html

+0

需要複製的實例必須保持運行。同步過程中丟失的數據並不是一個可怕的問題,因爲它只是會話變量。 – user1119648