Mysql大批量插入數據報Packet for query is too large

項目中需要導入Excel文件,然後入庫,突然最近這幾天系統日誌經常報錯:### Error updating database.  Cause: com.mysql.jdbc.PacketTooBigException: Packet for query is too large (49049746 > 4194304). You can change this value on the server by setting the max_allowed_packet' variable.,具體錯誤日誌截圖如下:

因是mysql的max_allowed_packet設置過小引起的,安裝時默認設置的是1M

mysql根據配置文件會限制server接受的數據包大小。

 

記住執行下面的命令必須是在登陸的前提下

登陸mysql

查看mysql設置的max_allowed_packet大小

show VARIABLES like '%max_allowed_packet%';

可以看到確實很小

解決方案

更改  max_allowed_packet  的方式有兩種

1.直接命令行修改  

set global max_allowed_packet = 2*1024*1024*10;  這樣 代表設置成20  大家看着改成自己需要的即可

這樣修改好處是, 有些公司的數據庫服務不能停這樣修改不用重啓服務  壞處是這是臨時的方案,重啓服務就數值就恢復了

 

大家修改完可以再次查看下

show VARIABLES like '%max_allowed_packet%';

有人發現沒改變,彆着急退出登陸重新登陸在查看下 記住 是 exit 不是重啓mysql服務

從新登陸後就會發現改變了  一開始我沒退出 發現數值沒改變以爲 這種方式沒效果

2. 修改my.cnf

我們是以linux爲基礎的windows下會更簡單,自行百度

很多人都找不到  linux 下的my.cnf文件 

由於最近在 linux 安裝下 mysql  所以對這個文件比較瞭解 

正常我們下載好  mysql  壓縮包 -zxvf 解壓 後在 /etc/my.cnf 會存在這個文件  還可能存在另一個路徑下 我給忘記了,大家需要的話可以百度下  我的就是在  /etc/my.cnf 下 安裝好 mysql 後 很多人在啓動  mysql 的時候 會報錯 我當時也遇到啦這個問題 ,網上找了很多說的 把 /etc/my.cnf 刪除就可以啓動啦 我當時試了  確實刪除可以啓動  在這裏告訴大家做沒把握的事時記得備份 ,我當時就備份了,但是我想不明白,my.cnf 存在即合理 ,他肯定有用,那會我就想他是幹嘛用的,爲什麼刪除也能啓動,後來我明白,那是mysql的參數配置文件,比如 編碼啊 端口啊等等  裏面可以設置 咱們今天的  max_allowed_packet  直接 max_allowed_packet=100M 你想要的數值,之後保存重啓數據庫就行.爲什麼刪除也可以呢,我猜測沒有的話 mysql 使用默認的,這是我的猜測 ,如果哪位大佬知道可以評論告訴大家.但是刪除其實是在躲避,現在想想解決啓動錯誤用這種方式很Low,mysql有錯誤日誌的,我當時看了下日誌明白爲什麼啓動報錯,因爲設置參數時 是鍵值對的 我的 key 寫錯了,修改後 沒刪除 my.cnf 也能正常啓動了,如果大家 沒有my.cnf也不要緊,可以自己建一個 裏面的 參數百度一搜一大波 ,挑你需要的保留不需要的刪除即可

我的 my.cnf    max_allowed_packet發現配置是max_allowed_packet=1M,直接將1改爲20即可

修改之後重新啓動mysql服務,查看 max_allowed_packet配置大小

ok,搞定

歡迎大家在評論區留言問問題,但有一個前提,我希望大家問之前,先自己百度一波,這樣也能提高你解決問題的思路

我在很多博客下面看到很多問題很基礎,如果連基礎不能理解的話,就很難做上層bug的修改,比如咱們今天講的,你要能找到my.cnf或者能登陸mysql 使用命令行修改,假如你不會登陸,這就很難受了

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章