使用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的值,但是沒什麼作用。