MySql錯誤:MySQL server has gone away

 

錯誤描述:mysql

C++項目,使用ado鏈接mysql數據庫,調試過程當中發現執行更改、刪除語句時執行失敗,可是sql語句拷貝到Navicat中能夠執行,程序中顯示的錯誤信息:sql

ConnectError
ErrNo = 80004005
ErrMean = 未指定的錯誤
ErrSource = Microsoft OLE DB Provider for ODBC Drivers
Describe = [MySQL][ODBC 5.1 Driver][mysqld-5.0.24a-community-nt]MySQL server has gone away數據庫

 

錯誤緣由:windows


一、應用程序(好比PHP)長時間的執行批量的MYSQL語句。最多見的就是採集或者新舊數據轉化。
解決方案:
到mysql的安裝目錄中找到my.cnf文件(windows下爲my.ini),在其中添加或者修改如下兩個變量:
wait_timeout=2880000
interactive_timeout = 2880000
關於兩個變量的具體說明能夠google或者看官方手冊。若是不能修改my.cnf,則能夠在鏈接數據庫的時候設置CLIENT_INTERACTIVE,好比:
sql = "set interactive_timeout=24*3600";
mysql_real_query(...)ide


二、執行一個SQL,但SQL語句過大或者語句中含有BLOB或者longblob字段。好比,圖片數據的處理
解決方案:
在my.cnf文件中添加或者修改如下變量:
max_allowed_packet = 10M(也能夠設置本身須要的大小)
max_allowed_packet 參數的做用是,用來控制其通訊緩衝區的最大長度。google

 

注意:spa

有時候設置完max_allowed_packet = 16M後重啓,發現MySql不能打開,鏈接失敗,能夠嘗試換個方式賦值:調試

此處16M數值的設置,有些系統用max_allowed_packet = 16M設置成功,有些用max_allowed_packet=1024*1024*16 設置成功,server

有些須要把1024*1024*16 的值計算出來,用計算出來的值設置才能成功。blog

 

最終解決方案:

個人my.ini文件中沒有上述幾個變量,因此在文件最後添加了:

max_allowed_packet = 32M 
wait_timeout=2880000
interactive_timeout = 2880000

重啓,運行成功。

 

另外,除了上述改動外,我還修改了兩個地方:

1. 默認爲第一個選項,更改成「使用池鏈接此驅動程序」。 此處也能夠不改動,由於後來偶然發現這個選項又變回去了,可是錯誤也沒有再出現

 

 

2.在配置好的用戶DSN - ODBC數據源中的Flags中選擇瞭如下幾項,原來默認的是所有沒有選擇

 

後面這兩個地方可能不須要修改,就可以修復MySQL server has gone away的錯誤,僅作個記錄和參考吧。

相關文章
相關標籤/搜索