萬盛學電腦網

 萬盛學電腦網 >> 數據庫 >> mysql教程 >> 解決#2006

解決#2006

MySQL server has gone away是告訴我們內存不足或系統原因了,解決辦法只要對mysql配置文件參數進行一些調整即可解決,具體如下.

使用php插入大數據記錄到Mysql的時候,遇到一個問題:

2006:MySQL server has gone away :: insert into ******

經過查找,知道了原因,是Mysql的max_allowed_packet的值設置得過小或者沒有設置,此變量是用來控制其通信緩沖區的最大長度。

解決方法:

[mysqld]
max_allowed_packet = 16M

在my.cnf文件中設置上述變量到mysqld段中,如果沒有就添加。

關於max_allowed_packet的主要解釋如下:

包或任何生成的/中間字符串的最大大小。這個過程大部分發生在load data file中,有時也發生在update,insert中。

包消息緩沖區初始化為net_buffer_length字節,但需要時可以增長到max_allowed_packet字節。該值默認很小,以捕獲大的(可能是錯誤的)數據包。

如果你使用大的BLOB 列或長字符串,你必須增加該值。應同你想要使用的最大的BLOB一樣大。max_allowed_packet的協議限制為1GB。這個值必須是1024的倍數;如果不是1024倍數的值,mysql就會自動四捨五入為最接近的1024的倍數。

當你改變max_allowed_packet的值,你就改變了消息緩沖區的大小,你也應該在客戶端允許的范圍內修改客戶端的buffer大小。在客戶端,max_allowed_packet默認值是1GB。你可以通過命令行或者配置文件,改變客戶端的max_allowed_packet值。

在MySQL5.0.84版本中,會話max_allowed_packet值,還只是只讀的。在5.0.84之前的版本,設置會話中可以設置max_allowed_packet的值,但是沒什麼作用。

copyright © 萬盛學電腦網 all rights reserved