我出現這個報錯,是在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
一般情況下並不是經常需要這個大量數據的導入操作,用臨時修改的方式就可以了,如果是項目上必然會不定期有大量數據的導入,則需要用配置文件修改的方式了。