2010-01-29 53 views
3

我有200GB/400Mrows mysql/innodb數據庫 - 遠遠超出了我發現的合理範圍。大型mysql數據庫的可靠備份?

一個令人驚訝的問題是恢復備份。 mysqldump生成巨大的sql文件,大約需要一週時間才能導入到新的數據庫中(嘗試使其更快速地像更大/更小的事務,在導入期間關閉密鑰等,網絡壓縮等等失敗,myisam導入似乎快兩倍,但不會有交易)。

更糟糕的是 - 我希望得到一些幫助 - 在一週的時間內傳輸大於200GB的網絡連接具有破壞的不平凡的機會,並且sql導入過程不能在任何非平凡的方式。

什麼是最好的處理方式?現在,如果我看到一個破碎的我連接手動揣摩當它結束通過檢查最後導入的表的最高主鍵,然後有一個perlscript基本上做到這一點:

perl -nle 'BEGIN{open F, "prelude.txt"; @a=<F>; print @a; close F;}; print if $x; $x++ if /INSERT.*last-table-name.*highest-primary-key/' 

這個真沒有要走的路,那麼最好的方法是什麼?

回答

1

你的MySQL盒子是否有足夠的硬盤空間來存放所有的數據?本地存儲在這裏最好,但如果它不是一個選項,你也可以嘗試使用iSCSI的某種NAS設備。它仍然在網絡上發生,但在這種情況下,您將獲得更高的吞吐量和可靠性,因爲您只依賴一臺操作系統相當纖薄並且幾乎不需要重新啓動的NAS。

+0

這一切都在亞馬遜雲上。目前還沒有崩潰,到目前爲止,但我並不感到非常高興的事實,如果有曾經是其中之一,它將至少一個星期採取還原備份+隨機特設Perl腳本,如果失敗的話中途因任何原因。 – taw 2010-01-29 17:57:54

0

你需要數據庫中的所有東西嗎?

你可以把一些信息檔案數據庫,並添加東西到你的應用程序,可以讓人們在存檔查看記錄,

顯然,這取決於您的應用程序依賴大量而設置的,但它可能是一個解決方案?你的數據庫很可能只會變得更大....

+0

從長遠來看,這將是必要的修復它,但現在我只是想保持它的所有運行正常。 – taw 2010-01-29 17:51:34

1

不能使用mysqldump來備份大型數據庫 - 200G是可行的,但更大的人也變得越來越壞。

最好的辦法是把數據庫目錄的卷快照和zip這在某種程度上 - 這就是我們通常做 - 或rsync的別的地方。

如果你的文件系統或塊設備不支持快照,那麼你基本上有麻煩了。您可以關閉數據庫進行備份,但我不認爲您想這樣做。

要恢復它,只需做相反的事情,然後重新啓動並等待innodb恢復來解決問題(可能需要一些時間)。

的maatkit MK-平行轉儲和恢復工具有點比mysqldump的更好,速度明智的 - 但我不是100%確信自己正確性


編輯的:重新解讀這個問題,我認爲文件系統快照+ rsync可能是最好的方法;您可以在不影響實時系統的情況下執行此操作(只需要傳輸自上次備份以來更改的內容),並且如果連接失敗,則可以恢復rsync,並且它會繼續停止。

+0

有關於這方面的一個重要的一點是要確保你的備份文件ibdata(ibdata1中等等)在MySQL數據目錄。這被innodb使用,如果沒有它,備份將是錯誤的。 – 2017-05-06 08:43:46