2015-11-07 87 views
1

我有一個sql轉儲文件。其中有185458條記錄在表中。例如如何將超過100000條記錄導入到mysql數據庫中?

INSERT INTO `cities` (`city_id`, `city_name`, `countryId`, `stateid`, `countryCode`, `latitude`, `longitude`, `zip_code`) VALUES 
(2, 'Djelfa', 67, 1, 'DZA', 34.67, 3.25, ''), 
(3, 'Valenza', 115, 2, 'ITA', 45.02, 8.63, '15048'), 
... 
... 
... 
(185452, 'Bosendurnbach', 17, 771, 'AUT', 48.5, 15.77, ''), 
(185453, 'Môlay', 79, 937, 'FRA', 47.73, 3.94, ''), 
(185454, 'Miloszyce', 183, 422, 'POL', 51.05, 17.31, ''), 
(185455, 'Lovce', 212, 698, 'SVK', 48.45, 18.37, ''), 
(185456, 'Winchester', 174, 74, 'NZL', -44.2, 171.28, ''), 
(185457, 'Wohlde', 62, 402, 'DEU', 54.4, 9.3, ''), 
(185458, 'Chiavazza', 115, 2, 'ITA', 45.58, 8.07, ''); 

後很長一段時間我得到這個錯誤

Fatal error: Maximum execution time of 300 seconds exceeded in C:\xampp\phpMyAdmin\libraries\dbi\DBIMysqli.class.php on line 290

如何導入?

回答

8

錯誤消息非常明確,並指出您遇到的問題是:在您的php環境中執行時間的限制。因此,一些方法來解決這個問題是顯而易見的:

  1. 增加環境的時限

你可以做到這一點無論是提高極限在你的PHP配置,或者,如果允許的話,通過動態地增加其在您的導入腳本中。所以像ini_set('max_execution_time', 3000)。這兩個選項都有記錄。 PHP文檔應該總是是您應該開始尋找這樣一個問題的答案的第一個位置。

  • 使用不同的PHP環境
  • 典型地,這樣的限制被選擇用於網絡環境以減少服務從人在那裏請求的風險。然而,沒有人會反對在另一個環境中使用不同的配置。導入作業通常是而不是通過使用web請求處理,但通過在命令行(CLI)中使用php。對於這樣的典型情況,使用單獨的配置。再次,這是記錄。這就是你可以在這裏用來根據你的需要配置彼此不同的環境。但是爲此,您需要在CLI上訪問php。這對您自己的系統沒有任何問題,但通常在廉價的虛擬主機服務上不可用。

  • 分裂您導入成小塊
  • 由於數據您導入存儲在SQL文件中,這樣一個簡單的文本文件,你可以使用任何普通的文本編輯器修改該文件。注意:一個文本編輯器,不是的一個文字處理器。您可以將其中包含的大INSERT聲明拆分爲幾個塊。語法很明顯。

  • 使用許多單獨的插入語句,而不是一個大的一個
  • 根據不同的工具,您使用它來創建你想現在導入你有一個選項,轉儲文件創建轉儲,以便它使用多個單獨的INSERT語句(每行一個)而不是一個大的,合併的語句。例如,mysqldump爲此提供--skip-extended-insert標誌。有了這樣的轉儲文件,通過簡單地分割文件就可以將導入分割成幾個較小的塊。

  • 旁路進口PHP共
  • 如果你有你的數據庫服務器(MySQL的在這種情況下)的直接訪問,那麼你可以簡單地直接與它互動而不是使用中間的phpMyAdmin工具。您可以直接通過MySQL的source命令直接加載轉儲文件。這樣你就完全獨立於PHP的限制。

    1

    您有最大執行時間的問題。
    你應該按照下面的鏈接:Increase execution time

    萬一鏈接不工作,這是從鏈接povided相同。
    ini_set('max_execution_time', 300); //300 seconds = 5 minutes
    將它放在PHP腳本的頂部。


    希望這可以幫助你。

    2
    Try combining insert values in group of 10,000 
    
    For e.g. 
    
    INSERT INTO `cities` (`city_id`, `city_name`, `countryId`, `stateid`, `countryCode`, `latitude`, `longitude`, `zip_code`) VALUES 
    (2, 'Djelfa', 67, 1, 'DZA', 34.67, 3.25, ''), 
    (3, 'Valenza', 115, 2, 'ITA', 45.02, 8.63, '15048'), 
    
    
    ... 
    ... 
    (10000, 'Valenza', 115, 2, 'ITA', 45.02, 8.63, '15048'); 
    INSERT INTO `cities` (`city_id`, `city_name`, `countryId`, `stateid`, `countryCode`, `latitude`, `longitude`, `zip_code`) VALUES 
    
    (10001, 'Valenza', 115, 2, 'ITA', 45.02, 8.63, '15048'), 
    ... 
    (185452, 'Bosendurnbach', 17, 771, 'AUT', 48.5, 15.77, ''), 
    (185453, 'Môlay', 79, 937, 'FRA', 47.73, 3.94, ''), 
    (185454, 'Miloszyce', 183, 422, 'POL', 51.05, 17.31, ''), 
    (185455, 'Lovce', 212, 698, 'SVK', 48.45, 18.37, ''), 
    (185456, 'Winchester', 174, 74, 'NZL', -44.2, 171.28, ''), 
    (185457, 'Wohlde', 62, 402, 'DEU', 54.4, 9.3, ''), 
    (185458, 'Chiavazza', 115, 2, 'ITA', 45.58, 8.07, ''); 
    
    
    This will definitely improve the performance 
    
    +1

    但如果它會採取執行時間超過300秒,然後再它會停止.. –

    +0

    權,在這種情況下,我必須設置max_execution時間 –

    1

    我不認爲這是MySQL的問題,它是PHP配置的一個問題。您可以通過直接將SQL文件導入到Mysql來從命令提示符解決此問題,從而從圖片中消除PHP。

    由於您使用的是Windows,

    C:\xampp\mysql\bin\mysql -u {username} -p {databasename} < file_name.sql 
    
    相關問題