數(shù)據(jù)庫(kù):MySQL參數(shù)Max_Allowed_Packet 介紹
1、參數(shù)作用
max_allowed_packet參數(shù)是指mysql服務(wù)器端和客戶端在一次傳送數(shù)據(jù)包的過(guò)程當(dāng)中最大允許的數(shù)據(jù)包大小。如果超過(guò)了設(shè)置的最大長(zhǎng)度,則會(huì)數(shù)據(jù)庫(kù)保持?jǐn)?shù)據(jù)失敗。
2、問(wèn)題場(chǎng)景
● 有時(shí)候業(yè)務(wù)的需要,可能會(huì)存在某些字段數(shù)據(jù)長(zhǎng)度非常大(比如富文本編輯器里面的內(nèi)容),造成插入和更新數(shù)據(jù)庫(kù)會(huì)被max_allowed_packet 參數(shù)限制掉,導(dǎo)致數(shù)據(jù)庫(kù)操作失敗。
● 將本地?cái)?shù)據(jù)庫(kù)遷移到遠(yuǎn)程數(shù)據(jù)庫(kù)時(shí)運(yùn)行sql錯(cuò)誤。錯(cuò)誤信息是max_allowed_packet
會(huì)看到如下的報(bào)錯(cuò)信息:
Packet for query is too large (20682943>1048576). You can change this value on the server by setting the max_allowed_packet’ variable.
這個(gè)時(shí)候需要設(shè)置max_allowed_packet參數(shù)的大小,從而滿足業(yè)務(wù)數(shù)據(jù)的保存,當(dāng)然設(shè)置的大小要根據(jù)實(shí)際的業(yè)務(wù)需要,并不是越大越好,要設(shè)置合理的數(shù)據(jù)長(zhǎng)度。
https://www.jb51.net/article/268311.htm
3、查詢當(dāng)前數(shù)據(jù)庫(kù)設(shè)置的大小
查詢當(dāng)前數(shù)據(jù)庫(kù)設(shè)置情況,下面兩種查詢SQL均可以
show variables like ‘%max_allowed_packet%’;
select @@max_allowed_packet;
set global max_allowed_packet = 500 * 500 * 1024;
4、如何調(diào)整配置
(1)通過(guò)修改配置文件,需要重啟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>
注意:
● 通過(guò)命令行方式修改時(shí),不能用M、G,只能這算成字節(jié)數(shù)設(shè)置。使用配置文件修改才允許設(shè)置M、G單位。
● 命令行修改之后,需要退出當(dāng)前回話(關(guān)閉當(dāng)前mysql server鏈接),然后重新登錄才能查看修改后的值。通過(guò)命令行修改只能臨時(shí)生效,如果下次數(shù)據(jù)庫(kù)重啟后對(duì)應(yīng)的配置就會(huì)又復(fù)原了,因?yàn)橹貑⒌臅r(shí)候加載的是配置文件里面的配置項(xiàng)。
● max_allowed_packet 最大值是1G(1073741824),如果設(shè)置超過(guò)1G,查看最終生效結(jié)果也只有1G。