MySQL:MySQL server has gone away解決

    我出現這個報錯,是在C++項目中用Mysql的庫函數mysql_real_query往數據庫中插入數據的時候出現的,插入的數據有7M、8M。通過網上搜索這個錯誤,瞭解到是因爲我們寫入的數據太大了,在使用msyql導入大文件sql的時候也可能會出現這個錯誤的。這個問題是max_allowed_packet配置的默認值太小了,該項的作用是限制mysql服務器端接收到的包的大小,所以我們發送的值超過這個設置值的話,機會導致服務端不接受這些數據而出錯。

    要解決這個問題,只需要調整max_allowed_packet的大小就行了。

    查看max_allowed_packet的大小:

MariaDB [(none)]> show global variables like "max_allowed_packet";
+--------------------+-----------+
| Variable_name      | Value     |
+--------------------+-----------+
| max_allowed_packet | 1048576   |
+--------------------+-----------+
1 row in set (0.00 sec)

    可以看到我這裏默認情況下只有1M大小,將其設置成150M(1024*1024*150):

MariaDB [(none)]> set global max_allowed_packet=157286400;
Query OK, 0 rows affected (0.00 sec

    然後再次使用上面的命令就可以看到已經成功修改了。

    但上面的設置方法只對當前有效,重啓mysql就會恢復到默認值了,我們可以修改mysql的配置文件my.cnf使其永久生效,只需要添加下面的內容就行了。

max_allowed_packet=150M

     一般情況下並不是經常需要這個大量數據的導入操作,用臨時修改的方式就可以了,如果是項目上必然會不定期有大量數據的導入,則需要用配置文件修改的方式了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章