MySQL / MariaDB 修改資料插入上限 max_allowed_packet
在 MySQL / MariaDB 插入資料時,每筆資料也會有限制,預設值是 16MB,其實這個 16MB 的限制已經很寬鬆,一般情況都會夠用,但如果將檔案 (例如圖片) 直接儲存在 MySQL 的話,便有可能出現錯誤,當用 inert 插入 或 update 更新的資料超過限制的話,會出現以下錯誤:
Error 1153 – Got a packet bigger than ‘max_allowed_packet’ bytes
要解決這個問題可以修改 MySQL 的 max_allowed_packet 變數。
在修改前可以先查看目前的 max_allowed_packet 變數的數值,在 CLI 登入 MySQL:# mysql -u mysql -p
登入 MySQL 後輸入以下指令查看:
1234567 | mysql> show variables like ‘max_allowed_packet’;+——————–+———-+| Variable_name | Value |+——————–+———-+| max_allowed_packet | 16777216 |+——————–+———-+1 row in set (0.00 sec) |
上面的數值是 16MB,例如想加大到 32MB, 可以用以下兩種方法設定:
1. 實時改變 max_allowed_packet 變數
這個方法的好處是立即生效,而且不用重新啟動 MySQL,但缺點是下次重新啟動 MySQL 後設定會失效。登入 MySQL 後,輸入以下指令:
1 | mysql> mysql> set global max_allowed_packet=33554432; |
2. 修改 my.cnf
修改 my.cnf 可以在重新啟動 MySQL 也保持設定生效,開啟 my.cnf:# vi /etc/my.cnf
在 [mysqld] 段落加入 max_allowed_packet 的設定,例如:
12 | [mysqld]max_allowed_packet=32M |
最後重新啟動 MySQL:# systemctl restart mysql
最後重新啟動 Mariadb:# systemctl restart mariadb