我試圖導入一個非常大的.sql文件到我的數據庫中。該文件目前是20GB大。我嘗試使用控制檯mysql數據庫< backup.sql,但這需要超過24小時,並且mysql服務器不再有任何反應。導入大型sql文件(> 20GB)
如何導入這樣一個大文件?我認爲將它分開是一種方式,但我怎樣才能正確地分割它?它只有一個包含多個插入語句的表。
我試圖導入一個非常大的.sql文件到我的數據庫中。該文件目前是20GB大。我嘗試使用控制檯mysql數據庫< backup.sql,但這需要超過24小時,並且mysql服務器不再有任何反應。導入大型sql文件(> 20GB)
如何導入這樣一個大文件?我認爲將它分開是一種方式,但我怎樣才能正確地分割它?它只有一個包含多個插入語句的表。
MySQL具有內置於語言中的api驅動表插入。見下文。 使用此:http://dev.mysql.com/doc/refman/5.1/en/load-data.html
你需要重新從INSERT語句以某種形式CSV或類似的文件,但這應該多下單要快那麼個人陳述,因爲它是對RDBMS溝通的方式「我要上傳大量數據,將重新識別和簿記開銷保存到最後,確保您有足夠的空間並且一次抓取該空間,而不是每次填滿時,確保使用適當的鎖等,等等「。
簡單地鎖定表,然後做這個表數據文件(.frm,.MYI,.MYD)的副本。
立即得到一個可以導入到任何數據庫的現成數據文件。
這種方法對myisam非常有效。 不確定innodb。
您可以拆分sql文件並將其導入到數據庫中。分裂sqldump文件
最簡單的方法是使用sqldumpsplitter
軟件,下載link
或者使用此終端命令分割
split -l 5000 ./path/to/mysqldump.sql ./mysqldump/dbpart-
這裏5000的SQL命令的行數,你更願意分手。接下來的兩個參數分別是源路徑和目標路徑。單個分割文件將被分配一個名稱並在其末尾添加一個字母。
希望它可以幫助其他有這個問題的人。
我建議你考慮以下的情況下,試圖跨越分割文件保存SQL查詢:
武裝與這兩種情況下這方面的知識,你可以寫一個簡單的腳本,通過線處理您的SQL轉儲線和塊拆分出來時,它會發現分號結束的行(;),也許500這樣的線路。
我已經寫這樣一個腳本用於我面臨着類似的問題:https://gist.github.com/pratikone/0a8d503ffe893b2111f5a1d70d3999b7
它僅用於檢查分號(;)的線,而不是在該行的末尾,但是我沒有任何在查詢中有分號(;)的SQL查詢,所以它工作得很好。鑑於此,如果數據在查詢之間可以有分號,那麼這是一個小的改動。
.sql文件不用於加載該大小的文件。您將被打開並使用該文件的每一行關閉事務。要做到這一點與任何性能,你需要特殊的工具。讓我們知道特別是哪個數據庫正在使用將幫助人們指向正確的方向。 – gbtimmon 2013-03-01 19:06:36
製作一個逐行讀取它的python程序,並不斷將它饋送到數據庫中。您還可以使程序打印偶爾的狀態消息(%完成等)。 – 2013-03-01 19:07:40
@SudiptaChatterjee不會讓它變慢,不會更快????? – gbtimmon 2013-03-01 19:08:35