Mysql性能調(diào)優(yōu)之max_allowed_packet使用及說明
Mysql max_allowed_packet使用
max_allowed_packet是什么?
指mysql服務(wù)器端和客戶端在一次傳送數(shù)據(jù)包的過程當(dāng)中最大允許的數(shù)據(jù)包大小。
什么情況下遇到?
有時(shí)候大的插入和更新會(huì)被max_allowed_packet 參數(shù)限制掉,導(dǎo)致失敗。
- 場(chǎng)景一:將本地?cái)?shù)據(jù)庫遷移到遠(yuǎn)程數(shù)據(jù)庫時(shí)運(yùn)行sql錯(cuò)誤。錯(cuò)誤信息是max_allowed_packet
- 場(chǎng)景二:插入數(shù)據(jù)時(shí)某個(gè)字段數(shù)據(jù)過于龐大(使用Elmentui編輯器自帶的圖片加密,圖片過多,地址超級(jí)長,最好用的時(shí)候改成自定義的),會(huì)報(bào)
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ù)修改好像無效,所以需要升級(jí)數(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報(bào)錯(cuò)超出max_allowed_packet
Mysql會(huì)根據(jù)配置文件會(huì)限制server接受的數(shù)據(jù)包的大小。
如果寫入大數(shù)據(jù)時(shí),因?yàn)槟J(rèn)的配置太小,插入和更新操作會(huì)因?yà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(命令行臨時(shí)修改)
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.命令行修改時(shí),不能用M、G,只能這算成字節(jié)數(shù)設(shè)置。配置文件修改才允許設(shè)置M、G單位。
2.命令行修改之后,需要退出當(dāng)前回話(關(guān)閉當(dāng)前mysql server鏈接),然后重新登錄才能查看修改后的值。通過命令行修改只能臨時(shí)生效,下次數(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)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
MySQL數(shù)據(jù)庫設(shè)計(jì)概念及多表查詢和事物操作
數(shù)據(jù)庫設(shè)計(jì)就是根據(jù)業(yè)務(wù)系統(tǒng)具體需求,結(jié)合我們所選用的DBMS,為這個(gè)業(yè)務(wù)系統(tǒng)構(gòu)造出最優(yōu)的數(shù)據(jù)存儲(chǔ)模型,本文給大家介紹MySQL數(shù)據(jù)庫設(shè)計(jì)概念及多表查詢和事物操作,感興趣的朋友一起看看吧2022-05-05MySQL數(shù)據(jù)同步Elasticsearch的4種方案
本文主要介紹了MySQL數(shù)據(jù)同步Elasticsearch的4種方案,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2023-03-03- 文章介紹了MySQL慢查詢排查的步驟,包括查看當(dāng)前正在運(yùn)行的事務(wù)狀態(tài)、查看線程狀態(tài)、殺死線程、輔助判斷命令、開啟慢查詢?nèi)罩竞烷_啟通用查詢?nèi)罩?/div> 2025-02-02
最新評(píng)論