2009-07-10 43 views
18

可能重複:
Speeding up mysql dumps and imports有更快的方式加載mysqldumps?

mysqldump是相當快的,但一箇中等大小的數據庫(20-30兆)的轉儲需要幾分鐘的時間用來加載mysql my_database < my_dump_file.sql

有一些我可以調整以加快負載的mysql設置嗎?有沒有更好的方法來加載保存的數據?

我已經使用基於CSV的轉儲使用mysqlimport實用程序進行了實驗。這些加載略微 - 但不明顯 - 加快。我很想複製原始數據庫文件,但這似乎是一個壞主意。

+0

僅供參考......我有一個RAID 5驅動器發生故障,這與一個MySQL造成非常糟糕的業績恢復。通常花費40分鐘的時間是24小時。僅供參考。 – gahooa 2011-05-03 18:31:57

回答

5

確保您在轉儲時使用了mysqldump的--opt選項。這將使用BULK INSERT語法,延遲關鍵更新等...


,如果你只使用MyISAM表,你可以放心地將它們複製通過停止服務器,將它們複製到停止服務器,開始。

如果你不想停止原服務器,你可以按照這個:

  1. 所有表上
  2. 刷新所有表
  3. 將文件複製
  4. 解鎖獲取讀鎖表

但我敢肯定你的複製到服務器需要停止,當你把它們放在適當的位置。

+0

其實這就是mysqlhotcopy所做的 – aldrinleal 2011-05-01 05:58:51

+0

不幸的是,我只有一個投票給予。改變我執行mysqldump的方式,按照你的建議使用--opt選項,可以減少5個小時的導入時間! – Nate 2015-04-10 18:40:27

+0

@Nate必須有其他原因,爲什麼你的導入現在更快,因爲默認情況下mysqldump中啓用「--opt」。至少自v5.5(2010)以來一直如此。 – dr01 2016-10-28 10:14:58

1

有一種使用LVM快照進行備份和恢復的方法,可能對您而言是一個有趣的選項。

而不是做一個mysqldump,可以考慮使用LVM快照你的MySQL數據目錄。使用LVM快照可以讓您擁有近乎實時的備份功能,支持所有存儲引擎以及令人難以置信的快速恢復。引用以下鏈接,

「恢復時間與將數據恢復和標準MySQL崩潰恢復一樣快,並且可以進一步降低。」

http://www.mysqlperformanceblog.com/2006/08/21/using-lvm-for-mysql-backup-and-replication-setup/

4

確定的數據是明智的,而且沒有任何的文件系統或系統性能的問題是什麼?長達20-30 meg的數據庫需要幾分鐘的時間。我在一臺配備2GB內存,320GB高清和標準2.1GHz處理器的MacBook上。我抓住我的數據庫中的一個快速基準測試:

gavinlaking$ du -sm 2009-07-12.glis 
74 2009-07-12.glis 
gavinlaking$ mysql -pxxx -e "drop database glis" 
gavinlaking$ mysql -pxxx -e "create database glis" 
gavinlaking$ time mysql -pxxx glis < 2009-07-12.glis 

real 0m17.009s 
user 0m2.021s 
sys 0m0.301s 

對於74兆字節文件爲17秒。這對我來說似乎相當活潑。即使它是4倍大(使它只有300兆),它在不到70秒內就完成了。

25

假設你正在使用的是InnoDB ...

我是有一堆,我想在一個合理的時間內導入現有的mysqldump輸出文件的情況。表(每個文件一個)大約爲500MB,每個包含大約5,000,000行數據。使用以下參數,我可以將插入時間從32分鐘縮短到3分鐘以下。

的innodb_flush_log_at_trx_commit = 2
innodb_log_file_size = 256M
innodb_flush_method = O_DIRECT

您還需要有一個相當大的innodb_buffer_pool_size設置。

因爲我的插入是一次性的,我之後恢復了設置。如果你要長期使用它們,請確保你知道他們在做什麼。

我發現了在Cedric Nilly's blog上使用這些設置的建議,每個設置的詳細說明可以在MySQL documentation中找到。