寫入MySQL報錯超出 max_allowed_packet 的問題。
MySQL會根據配置文件會限制server接受的數據包的大小。如果寫入大數據時,因為默認的配置太小,插入和更新操作會因為 max_allowed_packet 參數限制,而導致失敗。
查看當前配置:
mysql> show variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name | Value |
+--------------------+---------+
| max_allowed_packet | 4194304 |
+--------------------+---------+
1 row in set (0.00 sec)
也可以用select查看:
mysql> select @@max_allowed_packet;
+----------------------+
| @@max_allowed_packet |
+----------------------+
| 4194304 |
+----------------------+
1 row in set (0.00 sec)
mysql>
max_allowed_packet 如果不設置,默認值在不同的 MySQL 版本表現不同,有的版本默認1M,有的版本默認4M。
修改方法1(配置文件持久化修改):
vim /etc/my.cnf
[mysqld]
max_allowed_packet = 100M
注意:修改配置文件以后,需要重啟mysql服務才能生效。
mysql> show variables like '%max_allowed_pack%';
+--------------------+-----------+
| Variable_name | Value |
+--------------------+-----------+
| max_allowed_packet | 104857600 |
+--------------------+-----------+
1 row in set (0.00 sec)
修改方法2(命令行臨時修改):
mysql> set global max_allowed_packet = 100 * 1024 * 1024;
mysql> exit
[root@localhost opt]#
[root@localhost opt]# mysql -uroot
mysql>
mysql> select @@max_allowed_packet;
+----------------------+
| @@max_allowed_packet |
+----------------------+
| 104857600 |
+----------------------+
1 row in set (0.00 sec)
mysql>
注意:
1.命令行修改時,不能用M、G,只能這算成字節數設置。配置文件修改才允許設置M、G單位。
2.命令行修改之后,需要退出當前回話(關閉當前mysql server鏈接),然后重新登錄才能查看修改后的值。通過命令行修改只能臨時生效,下次數據庫重啟后又復原了。
3.max_allowed_packet 最大值是1G(1073741824),如果設置超過1G,查看最終生效結果也只有1G。
[mysqld]
max_allowed_packet = 1G
mysql> show variables like '%max_allowed_pack%';
+--------------------+------------+
| Variable_name | Value |
+--------------------+------------+
| max_allowed_packet | 1073741824 |
+--------------------+------------+
1 row in set (0.00 sec)
---------------------
參考:https://blog.csdn.net/sunny05296/article/details/80446944