本博客原文
另安利一篇我翻譯的國外大牛的神經網絡入門文章
最近在一次開發過程中,將數據寫入mysql時候總是報MySQL server has gone away
的錯誤,因爲mysql就是本地啓動的,而且從插入到報錯整個過程時間很短,因此不可能是連接方面的timeout一類的問題。最後通過網上搜索,看到了遇到類似問題的帖子,參考作者的做法,問題得到了解決。
原因是max_allowed_packet參數導致的。按照官方解釋增大這個參數可以使得從client到server端傳遞大數據時,系統能夠分配更多的擴展內存來處理。
首先查看mysql max_allowed_packet的值
mysql> show global variables like 'max_allowed_packet';
+--------------------+---------+
| Variable_name | Value |
+--------------------+---------+
| max_allowed_packet | 4194304 |
+--------------------+---------+
1 row in set (0.00 sec)
可以看到默認是4M,我的數據達到了5M多,難怪報錯。修改如下
mysql> set global max_allowed_packet=268435456;
Query OK, 0 rows affected (0.00 sec)
mysql> show global variables like 'max_allowed_packet';
+--------------------+-----------+
| Variable_name | Value |
+--------------------+-----------+
| max_allowed_packet | 268435456 |
+--------------------+-----------+
1 row in set (0.00 sec)
至此問題得到解決。另外如果重啓mysql,這裏的設置會被還原。如果想重啓後不還原,可以打開 my.cnf 文件,添加max_allowed_packet = 256M
即可。