[英]How to import more than 100000 records into a mysql database?
我有一個SQL轉儲文件。 該表中有185458條記錄。 例如
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, '');
長時間后,我收到此錯誤
致命錯誤:第290行的C:\\ xampp \\ phpMyAdmin \\ libraries \\ dbi \\ DBIMysqli.class.php中超過了300秒的最大執行時間
如何導入?
錯誤消息很清楚,並指出了問題所在:php環境中執行時間的限制。 因此,解決此問題的一些方法很明顯:
您可以通過提高php配置中的限制或在導入腳本中動態增加限制(如果允許)來實現。 所以像ini_set('max_execution_time', 3000)
。 這兩個選項均已記錄。 php文檔應該始終是您應該開始尋找此類問題答案的第一個位置。
通常,為Web環境選擇這種限制,以減少服務來自任何人的請求的風險。 但是,對於在另一個環境中使用不同的配置,沒有什么可說的。 導入作業通常不通過使用Web請求來處理,而是通過在命令行(CLI)中使用php來處理。 為此,通常使用單獨的配置。 再次說明。 這就是您可以在此處根據需要配置互不相同的兩種環境的方法。 但是為此,您需要在CLI上訪問php。 在您自己的系統上,這不是問題,但通常在廉價的Web托管服務上不可用。
由於您導入的數據存儲在一個sql文件(即簡單的文本文件)中,因此您可以使用任何普通的文本編輯器來修改該文件。 注意:文本編輯器, 而不是文字處理器。 您可以將其中包含的大INSERT
語句分成幾個塊。 語法非常明顯。
現在,根據要嘗試導入的用於創建該轉儲文件的工具的不同,您可以選擇創建轉儲,以使它使用許多單獨的INSERT
語句(每行一個)而不是一個大的合並的語句。 例如, mysqldump
為此提供了--skip-extended-insert
標志。 使用這樣的轉儲文件,只需簡單地將文件拆分即可將導入拆分為幾個較小的塊是很簡單的。
如果您可以直接訪問數據庫服務器(在這種情況下為MySQL),則可以直接與其直接交互,而不必在兩者之間使用phpMyAdmin
工具。 您可以直接通過MySQLs source
命令直接加載轉儲文件。 這樣,您就完全不受php限制。
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
您有最長執行時間的問題。
您應該點擊以下鏈接: 增加執行時間
如果鏈接不起作用,則與鏈接顯示的內容相同。
ini_set('max_execution_time', 300); //300 seconds = 5 minutes
將其放在您的PHP腳本的頂部。
希望這對您有所幫助。
我不認為這是MySQL的問題,不是PHP配置的問題。 您可以從命令提示符處解決此問題,方法是將SQL文件直接導入Mysql,從而從圖中刪除PHP。
由於您使用的是Windows,
C:\xampp\mysql\bin\mysql -u {username} -p {databasename} < file_name.sql
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.