簡體   English   中英

如何將超過100000條記錄導入到mysql數據庫中?

[英]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環境中執行時間的限制。 因此,解決此問題的一些方法很明顯:

  1. 增加環境的時間限制

您可以通過提高php配置中的限制或在導入腳本中動態增加限制(如果允許)來實現。 所以像ini_set('max_execution_time', 3000) 這兩個選項均已記錄。 php文檔應該始終是您應該開始尋找此類問題答案的第一個位置。

  1. 使用不同的php環境

通常,為Web環境選擇這種限制,以減少服務來自任何人的請求的風險。 但是,對於在另一個環境中使用不同的配置,沒有什么可說的。 導入作業通常通過使用Web請求來處理,而是通過在命令行(CLI)中使用php來處理。 為此,通常使用單獨的配置。 再次說明。 這就是您可以在此處根據需要配置互不相同的兩種環境的方法。 但是為此,您需要在CLI上訪問php。 在您自己的系統上,這不是問題,但通常在廉價的Web托管服務上不可用。

  1. 將導入分成較小的塊

由於您導入的數據存儲在一個sql文件(即簡單的文本文件)中,因此您可以使用任何普通的文本編輯器來修改該文件。 注意:文本編輯器, 而不是文字處理器。 您可以將其中包含的大INSERT語句分成幾個塊。 語法非常明顯。

  1. 使用許多單獨的插入語句,而不是一個大的插入語句

現在,根據要嘗試導入的用於創建該轉儲文件的工具的不同,您可以選擇創建轉儲,以使它使用許多單獨的INSERT語句(每行一個)而不是一個大的合並的語句。 例如, mysqldump為此提供了--skip-extended-insert標志。 使用這樣的轉儲文件,只需簡單地將文件拆分即可將導入拆分為幾個較小的塊是很簡單的。

  1. 完全繞過php導入

如果您可以直接訪問數據庫服務器(在這種情況下為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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM