有時使用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_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
若有業務合作需求,可寫信至: opweb666@gmail.com
創業、網站經營相關內容未來將發布在 小易創業筆記