數據庫:MySQL參數Max_Allowed_Packet 介紹
1、參數作用
max_allowed_packet參數是指mysql服務器端和客戶端在一次傳送數據包的過程當中最大允許的數據包大小。如果超過了設置的最大長度,則會數據庫保持數據失敗。
2、問題場景
● 有時候業務的需要,可能會存在某些字段數據長度非常大(比如富文本編輯器里面的內容),造成插入和更新數據庫會被max_allowed_packet 參數限制掉,導致數據庫操作失敗。
● 將本地數據庫遷移到遠程數據庫時運行sql錯誤。錯誤信息是max_allowed_packet
會看到如下的報錯信息:
Packet for query is too large (20682943>1048576). You can change this value on the server by setting the max_allowed_packet’ variable.
這個時候需要設置max_allowed_packet參數的大小,從而滿足業務數據的保存,當然設置的大小要根據實際的業務需要,并不是越大越好,要設置合理的數據長度。
https://www.jb51.net/article/268311.htm
3、查詢當前數據庫設置的大小
查詢當前數據庫設置情況,下面兩種查詢SQL均可以
show variables like ‘%max_allowed_packet%’;
select @@max_allowed_packet;
set global max_allowed_packet = 500 * 500 * 1024;
4、如何調整配置
(1)通過修改配置文件,需要重啟mysql(推薦)
● Linux 操作系統 修改my.cnf 文件
vim /etc/my.cnf
[mysqld]
max_allowed_packet = 100M
● Windows 5.7解壓版一般都是修改 my.ini 文件
[mysqld]
max_allowed_packet = 128M
(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>
注意:
● 通過命令行方式修改時,不能用M、G,只能這算成字節數設置。使用配置文件修改才允許設置M、G單位。
● 命令行修改之后,需要退出當前回話(關閉當前mysql server鏈接),然后重新登錄才能查看修改后的值。通過命令行修改只能臨時生效,如果下次數據庫重啟后對應的配置就會又復原了,因為重啟的時候加載的是配置文件里面的配置項。
● max_allowed_packet 最大值是1G(1073741824),如果設置超過1G,查看最終生效結果也只有1G。