2009-04-26 58 views
4

使用innodb表導出/導入mysql數據庫的最快方法是什麼?什麼是導入大型mysql數據庫備份的最快方法?

我有一個生產數據庫,我需要定期下載到我的開發機器來調試客戶問題。我們目前這樣做的方式是下載我們的常規數據庫備份,這些備份是使用「mysql -B dbname」生成的,然後進行gzip壓縮。然後我們使用「gunzip -c backup.gz | mysql -u root」來導入它們。

從我讀的「mysqldump --help」中可以看出,mysqldump默認運行了--opt,這看起來好像打開了一堆我能想到的東西,這會使導入速度更快,例如關閉索引並將表導入爲一個大量導入語句。

有沒有更好的方法來做到這一點,或進一步優化我們應該做的?

注意:我主要想優化將數據庫加載到我的開發機器(相對較新的macbook pro,有很多內存)所需的時間。備份時間和網絡傳輸時間目前並不是什麼大問題。

更新:

要回答的答案中提出了一些問題:

  • 生產數據庫模式的改變每週最多幾次。我們正在運行rails,所以在過時的生產數據上運行遷移腳本相對比較容易。

  • 我們需要將生產數據潛在地按每天或每小時放入開發環境。這完全取決於開發人員的工作。我們經常遇到特定的客戶問題,這些問題是由於某些數據分佈在數據庫中的多個表中而導致的,需要在開發環境中進行調試。

  • 我真的不知道mysqldump需要多長時間。不到2小時,因爲我們目前每2小時運行一次。但是,這不是我們想要優化的內容,我們希望優化對開發人員工作站的導入。我們不需要完整的生產數據庫,但將我們做和不需要的東西(有很多表與外鍵關係)分開並不是完全微不足道的。這可能是我們最終必須去的地方,但是如果可以的話,我們希望避免它一段時間。

回答

3

這取決於你如何定義「最快」。

正如Joel所說,開發人員的時間非常昂貴。 Mysqldump的工作和處理很多案件,否則你必須處理自己或花時間評估其他產品,看看他們是否處理它們。

相關的問題是:

多久做你的生產數據庫架構的變化?

注:我指的是添加,刪除或重命名錶,列,視圖等即將破壞實際代碼的東西。

你經常需要把生產數據到一個開發環境?

以我的經驗,不是很經常的。我通常發現一個月一次就足夠了。

多久mysqldump的需要?

如果是不到8小時可以一蹴而就作爲cron作業。問題解決了。

你需要的所有數據?

另一種方式來優化這個是簡單地獲取數據的相關子集。當然,這需要編寫一個自定義腳本來獲取實體和所有相關實體的子集,但會產生最快的最終結果。該腳本還需要通過模式更改進行維護,因此這是一個非常耗時的方法,應該作爲絕對最後的手段使用。生產樣本應足夠大以包含足夠寬的數據樣本,並確定任何潛在的性能問題。

結論

基本上,只要使用mysqldump直到你絕對不能。把時間花在另一種解決方案上是不花時間開發的。

+0

我回答了您的問題,作爲對我的問題的編輯。你提出了一些好的觀點。我還沒有放棄mysqldump,我更懷疑是否有一種方法可以優化它,而不僅僅是使用默認值,根據我的情況(優化導入速度)。 – 2009-04-26 02:58:15

2

考慮使用複製。這將允許您實時更新您的副本,即使您必須關閉從屬服務器,MySQL複製功能也能夠迎頭趕上。您也可以在普通服務器上使用並行MySQL實例,將數據複製到支持聯機備份的MyISAM表中。只要表具有相同的定義,MySQL就允許這樣做。

,可能是值得探討的另一個選擇是從著名的MySQL的性能專家的Percona XtraBackup。這是InnoDB的在線備份解決方案。但是,我自己並沒有看過它,所以我不會保證它的穩定性,或者它甚至是解決您的問題的可行解決方案。

+1

在這種情況下複製的問題是,開發通常會更改開發數據庫。恕我直言,全面轉儲是適當的解決方案。 – cletus 2009-04-26 01:43:34

相關問題