有時使用mysql insert時,會出現General error: 2006 MySQL server has gone away Raw SQL 的錯誤訊息

告訴你mysql無法處理,會出現這樣的情況幾乎是因為,一次寫入的資料量太大。


預設的情況下,mysql一次只能寫入1MB大小的檔案,若超過的話就會出現這個MySQL server has gone away的錯誤訊息。

解決辦法:

要解決此問題只需將max_allowed_packet這個設定調大即可。但在此之前可以先用

show variables like 'max_allowed_packet';

確認目前max_allowed_packet的大小,來判斷是否真的是它造成的。

+--------------------+----------+
| Variable_name      | Value    |
+--------------------+----------+
| max_allowed_packet | 10485760 |
+--------------------+----------+

出現10485760表示等於max_allowed_packet的上限為1MB (1024byte * 1024)


以下提供幾種修改max_allowed_packet上限的方法

(一).直接下SQL語法

set global max_allowed_packet=1024 * 1024 * 24

這種方式設定簡單,也適合無修改my.cnf權限的人。但此種方法有缺點,就是mysql重啟的話,設定值就會變回預設值了。


(二).修改my.cnf

這個方法就不用擔心mysql重啟會變會預設值,有my.cnf修改權限的,推薦用這個方法。

設定方式,打開my.cnf 添加max_allowed_packet=64M(大小自己訂),保存my.cnf

然後重啟mysql

systemctl restart mariadb

這樣就OK了,可以用show variables like 'max_allowed_packet'; 指令去查詢看看參數值是否有變。

設定max_allow_packet 解決General error: 2006 MySQL server has gone away Raw SQL

這邊要額外提醒一點,那就是max_allowed_packet這個參數要擺在my.cnf內的

[mysqld]

datadir=/var/lib/mysql

socket=/var/lib/mysql/mysql.sock


#要擺在這裡

max_allowed_packet=64M

[mysql_safe]


不能將它放置在[mysql_safe]之下,不然會沒有效果。(之前就是擺在最下方都沒效果,還以為是放錯檔案了)



文章轉載或引用,請先告知並保留原文出處與連結!!(單純分享或非營利的只需保留原文出處,不用告知)

原文連結:
https://blog.aidec.tw/post/fix-Mariadb-2006