在 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 后输入以下指令查看:
|
1 2 3 4 5 6 7 |
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 的设定,例如:
|
1 2 |
[mysqld] max_allowed_packet=32M |
最后重新启动 MySQL:
# systemctl restart mysql