The Will Will Web

記載著 Will 在網路世界的學習心得與技術分享

解決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 的安裝目錄下。

相關連結