﻿# 解決MySQL封包過大而導致無法匯入資料的問題

如果你有將檔案存入在 MySQL 資料庫的話，就很有可能遇到此問題，因為 MySQL 在執行 SQL 指令的時候是有大小限制的，單一個 SQL 指令的大小預設為 16MB，其實已經很大了，但是如果你的檔案超過這個大小的話，在執行 Insert 或 Update 指令的時候就有可能會發生 ERROR 2006 (HY000): MySQL server has gone away 的錯誤訊息。

這問題不只會發生在「開發時期」，也很可能發生在「資料轉移」的時，也就是你可能接了別人的案子，在做開發環境重建的時候可能會發現資料怎樣都匯入不了，但匯出資料卻是正常的！

要解決這個問題有好幾種作法：

1\. 執行匯入指令時特別指定 --max\_allowed\_packet 參數，讓連線的最大允許封包大小瞬間提高。

> mysql -u root --max\_allowed\_packet=32M DbName < data.sql

2\. 修改 MySQL 的全域設定檔 my.ini

> 若在 Linux 環境下，預設路徑在 /etc/my.cnf ，如果沒這個檔案的話你自己新增一個也行，或找出 my.cnf 在哪裡 ( 可以透過 locate 指令搜尋 )，設定的內容如下：
> 
> > \[mysqld\]
> > 
> > \# 設定最大可接受封包大小 (32MB)  
> > set-variable = max\_allowed\_packet=33554432
> 
> 若在 Windows 環境，預設是在 C:\\my.ini ，也有可能在 c:\\windows\\my.ini 或在 MySQL 的安裝目錄下。

**相關連結**

-   [MySQL 5.0 Reference Manual :: B.1.2.10 Packet too large](http://dev.mysql.com/doc/refman/5.0/en/packet-too-large.html)
