[SQL與PHP] phpMyAdmin 匯入 sql 出現「你正嘗試上載大容量檔案,請查看此文件如何略過此限制」的解決方案



[SQL與PHP] phpMyAdmin 匯入 sql 出現「你正嘗試上載大容量檔案,請查看此文件如何略過此限制」的解決方案

好不容易終於部署好 php 環境,
打開 phpMyAdmin 建立一個新資料庫,開開心心正要匯入 sql 檔,上面寫預設值只有2MB~
手上的 sql 檔遠遠超過2MB,如果不想理它,硬是給它匯入的話,
就會出現「你正嘗試上載大容量檔案,請查看此文件如何略過此限制」這串字~

解決方法有2種:
  • 修改 php.ini 檔案的參數。
  • 分割 sql 檔。(此方法本篇不敘述)


方法1的執行步驟如下:
  • 在電腦中搜尋 php.ini,有2個檔案要修改。(在 phpmyadmin / Apache 資料夾各有1個 php.ini 檔)
  • 檢查以下項目並修改值:(建議用記事本搜尋比較好找)
    • file_uploads 是否設定為 On (這是預設值)。
    • upload_max_filesize 是上傳檔案的最大限制,預設2M,可依需求調整。
    • post_max_size 是POST的資料量限制,預設8M,可依需求調整。
    • memory_limit 記憶體限制,預設8M,可依需求調整。
    注意:這3個數值的大小,必須是 memory_limit > post_max_size > upload_max_filesize
  • 如果資料庫檔案很大,則須調整以下項目:
    • max_execution_time 每個 php 頁面運行的最大時間值(秒),預設30秒。
    • max_input_time 每個 php 頁面接收資料所需的最大時間,預設60秒 。
    備註:這是為了防止上傳 sql 時不會因為時間太久被停止而調整。
  • 修改完數值後,重新啟動 Apache即可準備匯入 sql 檔囉。


謝謝網友的教學文,受益良多喔~:)


各預設值的設定範例:

1. max_execution_time
Script執行時間上限(單位:秒)
把數字改成 max_execution_time = 300


2. max_input_time

Script處理資料時間上限(單位:秒)
把數字改成  max_input_time = 300


3. memory_limit
系統記憶體(注意,這個的值一定要設比下面兩項的值都大)
把數字改成 memory_limit = 800M


4. post_max_size
使用表單的file欄位時是用POST傳值
這個可設定POST發送時的容量
把數字改成 post_max_size = 200M


5. upload_max_filesize
單次上傳檔案容量
把數字改成 upload_max_filesize = 200M


6. default_socket_timeout
Socket無回應斷線時間(單位:秒)
把數字改成 default_socket_timeout = 300


7. mysql.connect_timeout
無回應斷線時間(單位:秒;-1代表不斷線一直等)
把數字改成 mysql.connect_timeout = -1

MySql檔案過大的處理方法



sql上傳資料庫會受到2048kb的限制,

要解決這個問題我使用了2個方法:


(一) 分割 sql :

1. 先下載免費的sql 分割軟體 SQLDumpSplitter.exe

(下載:載點1載點2載點3)

2. 選2048kb為單位開始分割

3. 分割完成後,由_DataStructure.sql 最先開始上傳,

接著依照數字遞增上傳至資料庫( _1.sql、_2.sql、_3.sql 以此類推)。


---------------------------------------------------------------------------------------------

如果分割sql 無法解決問題,繼續至第2個方法。


(二) 更改phpMyAdmin 組態只允許 2MB 的最大上傳限制,修改php.ini中數值:



(1)在電腦中搜尋php.ini,進入修改。





以下為幾個關鍵設定:


‧file_uploads 項目是否設定為On(預設)。
‧upload_max_filesize 為上傳檔案的最大限制,預設為2MB(2M)。
‧post_max_size POST的資料量限制,預設為8M。‧memory_limit 記憶體限制,預設為8M。


***這3個數值的大小,必須是 memory_limit > post_max_size > upload_max_filesize .



‧max_execution_time 每個PHP頁面運行的最大時間值(秒),預設30秒。

‧max_input_time 每個PHP頁面接收資料所需的最大時間,預設60秒 。




***調這2個time數值是為了上傳sql 時不會因為時間太久而被停止。






修改完這些數值後重新啟動Apache


------------------------------------------------------------------------------------


我的case為:上傳400M的sql 到server。




我先試著將400M的sql 分割成較小的檔:


將 400M 的sql 以100M 為單位分割

最後分割成4個檔案:x_1.sql、x_2.sql、x_3.sql、xx_1.sql、_DataStructure.sql。


但是無法解決我的問題。





於是我修改 php.ini:

upload_max_filesize = 100M;


post_max_size = 100M;

max_execution_time = 6000;


max_input_time = 6000;


memory_limit = 120M;  



然後重新啟動 Apache

最後依照 DataStructure.sql 、x_1.sql、x_2.sql、x_3.sql、x_4.sql 的順序上傳。

(其實只要修改php.ini 直接上傳未分割原檔就可以了~

但割都割了就這樣囉~)

(2)修改phpmyadmin配置文件
  在完成php.ini的相關配置後,還需要修改phpmyadmin配置。
  1、修改phpmyadmin config配置文件中的$cfg[‘ExecTimeLimit’]配置選項,默認值是300,需要修改爲0,即沒有時間限制。
  2、修改phpmyadmin安裝根目錄下的import頁面中的$memory_limit
  
  說明:首選讀取php.ini配置文件中的內存配置選項memory_limit,如果爲空則默認內存大小限制爲2M,如果沒有限制則內存大小限制爲10M,你可以結合你php.ini配置文件中的相關信息修改這段代碼。
  至此,經過修改php.ini配置文件中的文件上傳配置選項以及phpmyadmin配置文件後,即可解決phpmyadmin上傳文件大小限制問題,從而實現phpmyadmin上傳大文件功能。


方法三:直接用dos的方式匯入資料庫

windows  dos 匯入資料庫檔

先移動到AppServ\MySQL\bin路徑下:
C:\Users\yunda>cd C:\AppServ\MySQL\bin


登入資料庫(-u帳號 -p密碼)
C:\AppServ\MySQL\bin>mysql.exe -uroot -p123456

/mysql/bin/mysql -uroot -p123456 SYN < SYN.sql

出現登入訊息後
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 6
Server version: 5.0.51b-community-nt-log MySQL Community Edition (GPL)

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
選擇資料庫
mysql> use SYN_KH
Database changed

選擇資料庫路徑:
mysql> \. C:\KH.sql
Query OK, 186 rows affected (0.02 sec)
Records: 186  Duplicates: 0  Warnings: 0

Query OK, 168 rows affected (0.03 sec)
Records: 168  Duplicates: 0  Warnings: 0

Query OK, 182 rows affected (0.03 sec)
Records: 182  Duplicates: 0  Warnings: 0

Query OK, 182 rows affected (0.03 sec)
Records: 182  Duplicates: 0  Warnings: 0

Query OK, 168 rows affected (0.03 sec)
Records: 168  Duplicates: 0  Warnings: 0

Query OK, 182 rows affected (0.03 sec)
Records: 182  Duplicates: 0  Warnings: 0

Query OK, 180 rows affected (0.03 sec)
Records: 180  Duplicates: 0  Warnings: 0

Query OK, 192 rows affected (0.03 sec)
Records: 192  Duplicates: 0  Warnings: 0

Query OK, 181 rows affected (0.03 sec)
Records: 181  Duplicates: 0  Warnings: 0

Query OK, 171 rows affected (0.03 sec)
Records: 171  Duplicates: 0  Warnings: 0

Query OK, 161 rows affected (0.03 sec)
Records: 161  Duplicates: 0  Warnings: 0

Query OK, 165 rows affected (0.03 sec)
Records: 165  Duplicates: 0  Warnings: 0

Query OK, 161 rows affected (0.03 sec)
Records: 161  Duplicates: 0  Warnings: 0

Query OK, 165 rows affected (0.02 sec)
Records: 165  Duplicates: 0  Warnings: 0

Query OK, 168 rows affected (0.03 sec)
Records: 168  Duplicates: 0  Warnings: 0

Query OK, 174 rows affected (0.03 sec)
Records: 174  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.01 sec)

Query OK, 103 rows affected (0.01 sec)
Records: 103  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.01 sec)

Query OK, 103 rows affected (0.00 sec)
Records: 103  Duplicates: 0  Warnings: 0

Query OK, 0 rows affected (0.01 sec)

Query OK, 0 rows affected (0.03 sec)


離開
mysql> exit

補上UBUNTU版本
可以使用  phpinfo.php 去找到  php.ini 的位置
位置:
/etc/php5/apache2/php.ini

改好後 apache 要重啟
sudo /etc/init.d/apache2 restart