olNGIb4NkK5r2x7x4oG3GpEzizVpnY6KNCck9cym

在 MySQL 資料庫中,參數 max_allowed_packet 是什麼?有什麼作用?如何設置?

在 MySQL 資料庫中,系統參數 max_allowed_packet 定義了傳輸資料封包(packet)的最大容許大小,在涉及大量資料或 BLOB 文件操作,以及部署主從複製(replication)時務必要適當地設置。

MySQL 資料庫中,參數 max_allowed_packet 是什麼?

MySQL 資料庫的設定中,參數 max_allowed_packet 是用來定義單個 MySQL 協議資料 封包(packet) 的最大容許大小,這個參數會影響伺服器與客戶端之間傳輸的資料量,尤其是涉及 二進制大型文件(binary large object, BLOB) 操作時。

MySQL 資料庫中,參數 max_allowed_packet 有何作用?

調整 max_allowed_packet 參數會影響到資料庫的效能與行為,簡單整理如下:
  1. 限制資料傳輸大小:當資料庫需要插入、更新或查詢大量數據,或是涉及 BLOB 文件操作時,如若傳輸的封包大小超出 max_allowed_packet 參數的限制,會使得操作失敗,或直接斷開連線。
  2. 資料庫服務的效能:增加 max_allowed_packet 參數雖然可以處理較大的封包,但也會使用較多的記憶體資源來處理這些資料封包;因此如果沒有妥善設定該數值,會造成資料庫服務的效能下降。
  3. 資料庫的複製操作:對於 MySQL 的主從複製(replication)操作也需要進行資料傳輸,因此也會受到 max_allowed_packet 參數的限制;如果從屬資料庫(slave database)的 max_allowed_packet 參數設定的比主要資料庫(master database)的要小,可能會導致複製中斷。
許多人經常會忽略到上述的第三點,建議在部署 MySQL 資料庫的主從複製(replication)時,務必要確保所有從屬資料庫(slave database)具有與主要資料庫(master database)相同或更大的 max_allowed_packet 參數值。

如何設置 MySQL 資料庫的 max_allowed_packet 參數?

檢查大小

SHOW VARIABLES LIKE '%max_allowed_packet%';

服務配置

可以直接調整 MySQL 設定文件 my.cnfmy.ini 中的參數大小:
[mysqld]
max_allowed_packet

臨時修改

如果僅只是短暫地調整,在具備有 SUPER 權限的狀況下,也可以執行以下 SQL 語句動態調整:
-- 設定為 64 MB
SET GLOBAL max_allowed_packet = 1024 * 1024 * 64;
客戶端如果也有其傳輸封包的大小限制也會影響 MySQL 資料庫是否能夠正常連線與操作,比如早期 PHP 中的 mysql 擴展庫(extension)的預設大小僅有 1 MB,甚至有些設備的防火牆與代理伺服器也會有封包大小限制。

張貼留言