數據庫:MYSQL參數max_allowed_packet 介紹

錯誤:MySQL server has gone away 

解決辦法:

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參數的大小,從而滿足業務數據的保存,當然設置的大小要根據實際的業務需要,並不是越大越好,要設置合理的數據長度。

3、查詢當前數據庫設置的大小

查詢當前數據庫設置情況,下面兩種查詢SQL均可以

show variables like ‘%max_allowed_packet%’;
select @@max_allowed_packet;

set global max_allowed_packet = 500 * 500 * 1024;

4、如何調整配置

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

4.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。
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章