Mysql性能調(diào)優(yōu)之max_allowed_packet使用及說明
Mysql max_allowed_packet使用
max_allowed_packet是什么?
指mysql服務(wù)器端和客戶端在一次傳送數(shù)據(jù)包的過程當(dāng)中最大允許的數(shù)據(jù)包大小。
什么情況下遇到?
有時候大的插入和更新會被max_allowed_packet 參數(shù)限制掉,導(dǎo)致失敗。
- 場景一:將本地數(shù)據(jù)庫遷移到遠(yuǎn)程數(shù)據(jù)庫時運(yùn)行sql錯誤。錯誤信息是max_allowed_packet
- 場景二:插入數(shù)據(jù)時某個字段數(shù)據(jù)過于龐大(使用Elmentui編輯器自帶的圖片加密,圖片過多,地址超級長,最好用的時候改成自定義的),會報
Packet for query is too large (20682943>1048576). You can change this value on the server by setting the max_allowed_packet’ variable.

解決辦法?
調(diào)整mysql的配置文件
mysql 56中該參數(shù)修改好像無效,所以需要升級數(shù)據(jù)庫到mysql57
window下修改配置文件my.ini 在mysqld段下添加
max_allowed_packet = 64M
后面的數(shù)字根據(jù)實(shí)際情況調(diào)優(yōu)
linux下修改etc/my.cnf ,同樣在mysqld段下添加
max_allowed_packet = 64M
注意改完參數(shù)后需要重啟mysql服務(wù)
查看目前配置
show VARIABLES like '%max_allowed_packet%';

寫入Mysql報錯超出max_allowed_packet
Mysql會根據(jù)配置文件會限制server接受的數(shù)據(jù)包的大小。
如果寫入大數(shù)據(jù)時,因為默認(rèn)的配置太小,插入和更新操作會因為 max_allowed_packet 參數(shù)限制,而導(dǎo)致失敗。
查看當(dāng)前配置
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 如果不設(shè)置,默認(rèn)值在不同的 MySQL 版本表現(xiàn)不同,有的版本默認(rèn)1M,有的版本默認(rèn)4M。
修改方法1(配置文件持久化修改)
vim /etc/my.cnf [mysqld] max_allowed_packet = 100M
注意:修改配置文件以后,需要重啟mysql服務(wù)才能生效。
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,只能這算成字節(jié)數(shù)設(shè)置。配置文件修改才允許設(shè)置M、G單位。
2.命令行修改之后,需要退出當(dāng)前回話(關(guān)閉當(dāng)前mysql server鏈接),然后重新登錄才能查看修改后的值。通過命令行修改只能臨時生效,下次數(shù)據(jù)庫重啟后又復(fù)原了。
3.max_allowed_packet 最大值是1G(1073741824),如果設(shè)置超過1G,查看最終生效結(jié)果也只有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)
以上為個人經(jīng)驗,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關(guān)文章
MYSQL每隔10分鐘進(jìn)行分組統(tǒng)計的實(shí)現(xiàn)方法
這篇文章主要給大家介紹了如何利用MYSQL實(shí)現(xiàn)每隔10分鐘進(jìn)行分組統(tǒng)計的方法,文中給出了詳細(xì)的示例代碼,相信對大家的理解和學(xué)習(xí)具有一定的參考借鑒價值,有需要的朋友們下面來一起看看吧。2016-12-12
MySql如何查看索引并實(shí)現(xiàn)優(yōu)化
這篇文章主要介紹了MySql如何查看索引并實(shí)現(xiàn)優(yōu)化,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-12-12
MySQL中查詢所有數(shù)據(jù)庫占用磁盤空間大小和單個庫中所有表的大小的sql語句
這篇文章主要介紹了在mysql中如何查詢所有數(shù)據(jù)庫占用磁盤空間大小的SQL語句,這樣方便我們了解數(shù)據(jù)庫的一些情況2013-08-08
MySQL?驅(qū)動中虛引用?GC?耗時優(yōu)化與源碼分析
這篇文章主要為大家介紹了MySQL?驅(qū)動中虛引用?GC?耗時優(yōu)化與源碼分析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-05-05
mysql?8.0.30?降級到?8.0.27的詳細(xì)步驟
這篇文章主要介紹了mysql?8.0.30?降級到?8.0.27,本文分步驟給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2022-09-09
深入分析mysql為什么不推薦使用uuid或者雪花id作為主鍵
這篇文章主要介紹了深入分析mysql為什么不推薦使用uuid或者雪花id作為主鍵,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
詳解MySQL中事務(wù)的持久性實(shí)現(xiàn)原理
這篇文章主要介紹了詳解MySQL中事務(wù)的持久性實(shí)現(xiàn)原理,幫助大家更好的理解和使用MySQL數(shù)據(jù)庫,感興趣的朋友可以了解下2021-01-01

