2012-06-04 83 views
0

我已經運行mysql -u root -p gf <〜/ gf_backup.sql來恢復我的db。但是,當我看到進程列表時,我發現一個查詢已經空閒了很長時間。我不知道原因。mysql轉儲查詢掛起

mysql> show processlist; 
    +-----+------+-----------+-------------+---------+-------+-----------+------------------------------------------------------------------------------------------------------+ 
    | Id | User | Host  | db   | Command | Time | State  | Info                         | 
    +-----+------+-----------+-------------+---------+-------+-----------+------------------------------------------------------------------------------------------------------+ 
    | 662 | root | localhost | gf | Query | 18925 | query end | INSERT INTO `gf_1` VALUES (1767654,'90026','Lddd',3343,34349),(1 | 
    | 672 | root | localhost | gf | Query |  0 | NULL  | show processlist                      | 
    +-----+------+-----------+-------------+---------+-------+-----------+------------------------------------------------------------------------------------------------------+ 
+0

您可以發佈與該表說明和任何關係/約束你的數據庫模式?不知道你的表是什麼,幾乎不可能確定可能出錯的東西。 – nageeb

回答

0

大概轉儲非常大,含有大量的標準化數據(記錄分割成一堆表,帶着一幫外鍵約束,索引等)。

如果是這樣,您可以嘗試從SQL文件中刪除所有約束和索引定義,然後導入數據並重新創建先前刪除的指令。這是加速導入的一個衆所周知的技巧,因爲INSERT未驗證任何約束的命令速度要快得多,並且之後可以在單個事務中創建索引等。

參見:http://support.tigertech.net/mysql-large-inserts

當然,你應該先殺死查詢。並刪除它已經創建的所有片段。

+0

查詢掛起可能是因爲我沒有足夠的磁盤空間嗎? –

+0

理論上,是的......但是你不能檢查那個嗎?! – mjhennig