數(shù)據(jù)庫:MySQL參數(shù)Max_Allowed_Packet 介紹
1、參數(shù)作用
max_allowed_packet參數(shù)是指mysql服務(wù)器端和客戶端在一次傳送數(shù)據(jù)包的過程當(dāng)中最大允許的數(shù)據(jù)包大小。如果超過了設(shè)置的最大長度,則會數(shù)據(jù)庫保持?jǐn)?shù)據(jù)失敗。
2、問題場景
● 有時候業(yè)務(wù)的需要,可能會存在某些字段數(shù)據(jù)長度非常大(比如富文本編輯器里面的內(nèi)容),造成插入和更新數(shù)據(jù)庫會被max_allowed_packet 參數(shù)限制掉,導(dǎo)致數(shù)據(jù)庫操作失敗。
● 將本地數(shù)據(jù)庫遷移到遠(yuǎn)程數(shù)據(jù)庫時運(yùn)行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.
這個時候需要設(shè)置max_allowed_packet參數(shù)的大小,從而滿足業(yè)務(wù)數(shù)據(jù)的保存,當(dāng)然設(shè)置的大小要根據(jù)實際的業(yè)務(wù)需要,并不是越大越好,要設(shè)置合理的數(shù)據(jù)長度。
3、查詢當(dāng)前數(shù)據(jù)庫設(shè)置的大小
查詢當(dāng)前數(shù)據(jù)庫設(shè)置情況,下面兩種查詢SQL均可以
show variables like ‘%max_allowed_packet%’;
select @@max_allowed_packet;
set global max_allowed_packet = 500 * 500 * 1024。
4、如何調(diào)整配置
(1)通過修改配置文件,需要重啟mysql(推薦)
● Linux 操作系統(tǒng) 修改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,只能這算成字節(jié)數(shù)設(shè)置。使用配置文件修改才允許設(shè)置M、G單位。
● 命令行修改之后,需要退出當(dāng)前回話(關(guān)閉當(dāng)前mysql server鏈接),然后重新登錄才能查看修改后的值。通過命令行修改只能臨時生效,如果下次數(shù)據(jù)庫重啟后對應(yīng)的配置就會又復(fù)原了,因為重啟的時候加載的是配置文件里面的配置項。
● max_allowed_packet 最大值是1G(1073741824),如果設(shè)置超過1G,查看最終生效結(jié)果也只有1G。