如果我們單看mysql提示MySQL server has gone away就是由於種種原因導致mysql當機了,導致MySQL server has gone away的原因有很多種,下面我來總結一下。
我自己人的經歷
先簡單介紹一下這個新手卡錄入後台,這個後台是提供給產品人員使用。可以向某個游戲的某個特定分區批量錄入新手卡信息,方便玩家獲取。後台設置的一次性最大錄入量為500。
先看日志吧,報錯的內容和日志的相同:
Error: SQLSTATE[HY000]: General error: 2006 MySQL server has gone away
這個錯誤信息很好的描述了是數據庫超時引起的。以前聽前輩說過,應該是wait_timeout環境變量設置的有問題。可是查看後,發現wait_timeout設的好高啊,為28800,不應該出問題啊。無解。
頭回來後,訴說。頭笑而不語,讓我只看,別說話。
代碼如下 復制代碼
show global variables;
set global wait_timeout = 120;
總結解決了,但很多MySQL server has gone away都與此問題無關了,都有和max_allowed_packet有關了
導入數據庫的時候 SQLyog 報錯了
Error Code: 2006 – MySQL server has gone away
搜了下,說是max_allowed_packet (MySQL的一個參數)設置的值不夠大。
那我改下就行了 嘿嘿
In Windows:
In the MySQL server installation directory,
in my.ini file, add the following line under [mysqld] in SERVER SECTION.
max_allowed_packet = 16M
In Linux:
Copy the my-xxx.cnf file from /usr/share/mysql to /etc as my.cnf
xxx can be small, medium, large, huge … depending on the requirement.
代碼如下 復制代碼$ cp /usr/share/mysql/my-xxx.cnf /etc/my.cnf
In the my.cnf file, change the default
max_allowed_packet = 1M
to
max_allowed_packet = 16M
Save the file and restart MySQL server.
今天導入.sql文件時出現了Error Code: 2006 – MySQL server has gone away錯誤,原來是導入的sql文件大於系統默認的max_allowed_packet的值,查了很多修改配置文件的,但是沒有找到my.cfg文件,修改其他文件不管用,所以直接使用sql語句來修改:
代碼如下 復制代碼SET GLOBAL max_allowed_packet=67108864;
就可以了,不是max_allowed_packet越大越好哦,大家可根據自己人情況來設置。