問題場景
項目開發過程中,數據庫是使用MYSQL
。因爲有一個表的字段是設置爲LONGTEXT
,最大可以存放 4GB
的內容。而這次,在控制檯執行SQL
,因爲大小過大,導致報錯。具體報錯提示如下:
Packet for query is too large (11234222 > 4194304). You can change this value on the server by setting the max_allowed_packet’ variable.
問題環境
軟件 | 版本 |
---|---|
mysql | 5.6.38 |
問題原因
從問題提示,我們就可以知道,是因爲SQL
執行的時候,被限制了大小,而SQL
超過了參數max_allowed_packet
指定的大小,導致SQL
執行報錯。所以,這個時候,就得改一下mysql
的配置參數,使得SQL
可以執行。
解決方案
臨時方案
如果沒有權限去數據庫服務器上面更新mysql
配置,比如博主這邊的mysql
服務是其他團隊提供的docker
容器,我沒有權限登錄過去更新。所以,這個時候,可以使用root
用戶執行以下語句:
// 查看當前參數配置
show variables like 'max_allowed_packet';
// 設置參數指標
set GLOBAL max_allowed_packet=33554432;
執行完畢之後,如果你立刻在這個控制檯執行show variables like 'max_allowed_packet';
,你會發現,結果和一開始跑的沒有什麼差別,就是更新沒有生效!
不要着急,這個不生效不是博主的sql
寫的有問題,是因爲我們查詢時使用的是show variables
的話,其效果等同於show session variables
,查詢的是會話變量
,只有使用show global variables
,查詢的纔是全局變量
。當然,爲了保守起見,我們需要斷開數據庫連接,重新連接數據庫。如果大家是使用Aqua Data Studio
,則點擊以下按鈕即可:
如果不是,是在控制檯,就先exit
,然後再登錄。然後再執行show variables like 'max_allowed_packet';
,你會發現,結果已經生效了。
永久方案(需要重啓mysql服務)
如果大家的mysql
服務器是本地的,或者是有權限修改配置文件並重啓的,則可以通過修改配置文件,然後重啓mysql
服務器的方式來解決這個問題。
找到my.cnf
文件,在mysqld
選項內部,添加max_allowed_packet = 200M
,如下圖:
接下來重啓mysql
服務器即可。
結果
再執行插入語句,順利插入!!!
總結
工作中,總是會遇到很多問題。好記性不如爛筆頭。如果寫下博客,在寫的過程中,可以從中汲取不同的東西。如果想寫的出彩,就會去思考很多,寫出來的文章就會更好,對自己的成長就更大!
隨緣求贊
如果我的文章對大家產生了幫忙,可以在文章底部點個贊或者收藏;
如果有好的討論,可以留言;
如果想繼續查看我以後的文章,可以點擊關注
可以掃描以下二維碼,關注我的公衆號:楓夜之求索閣,查看我最新的分享!