[英]Importing large sql file to MySql via command line
我正在嘗試通過Ubuntu中的命令行將大約300MB的sql文件導入MySql。 我用了
source /var/www/myfile.sql;
現在它顯示了看似無限的行:
Query OK, 1 row affected (0.03 sec)
然而它現在已經運行了一段時間。 我之前沒有導入這么大的文件所以我只是想知道這是否正常,如果進程停止或有一些錯誤,這將顯示在命令行中還是這個進程將無限期地繼續?
謝謝
您可以使用標准輸入導入.sql文件,如下所示:
mysql -u <user> -p<password> <dbname> < file.sql
注意: <-p>
和<password>
之間不應該有空格
參考: http : //dev.mysql.com/doc/refman/5.0/en/mysql-batch-commands.html
建議編輯的注意事項:建議的編輯使用內聯密碼參數稍微改變了這個答案。 我可以推薦它用於腳本,但是你應該知道,當你直接在參數( -p<password>
)中寫密碼時,它可以通過shell歷史記錄緩存,向任何能夠讀取歷史文件的人顯示你的密碼。 而-p
要求您通過標准輸入輸入密碼。
關於導入大文件所花時間的人最重要的是需要更多時間是因為mysql的默認設置是“autocommit = true”,你必須在導入文件之前將其設置為off,然后檢查導入如何像gem一樣工作...
首先打開MySQL:
mysql -u root -p
然后,您只需要執行以下操作:
mysql>use your_db
mysql>SET autocommit=0 ; source the_sql_file.sql ; COMMIT ;
+1到@MartinNuc,您可以在批處理模式下運行mysql
客戶端,然后您將看不到長行“OK”行。
導入給定SQL文件所需的時間取決於很多事情。 不僅是文件的大小,還有文件的類型,服務器服務器的強大程度,以及同時運行的其他內容。
@MartinNuc說他可以在4-5分鍾內加載4GB的SQL,但我已經運行了0.5 GB的SQL文件並且在較小的服務器上需要45分鍾。
我們無法猜測在服務器上運行SQL腳本需要多長時間。
你的評論,
@MartinNuc是正確的你可以選擇讓mysql客戶端打印每個語句。 或者你可以打開第二個會話並運行mysql> SHOW PROCESSLIST
來查看正在運行的內容。 但是你可能更感興趣的是“完成百分比”數字或估計完成剩余陳述需要多長時間。
對不起,沒有這樣的功能。 mysql客戶端不知道運行以后的語句需要多長時間,甚至不知道有多少語句。 因此,無法對完成所需的時間進行有意義的估算。
我用於大型sql還原的解決方案是mysqldumpsplitter腳本。 我將sql.gz拆分為單獨的表。 然后加載類似mysql workbench的東西並將其作為恢復到所需的模式進行處理。
這是腳本https://github.com/kedarvj/mysqldumpsplitter
這適用於較大的sql恢復,我使用的一個站點上的平均值是2.5gb sql.gz文件,20GB未壓縮,並且一旦完全恢復就會達到~100Gb
通過命令行將大型sql文件導入MySql
示例:mysql -u root -p aanew <aanew.sql
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.