程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> DB2數據庫 >> DB2教程 >> Mysql網絡斷開重連問題

Mysql網絡斷開重連問題

編輯:DB2教程

Mysql網絡斷開重連問題


最近做一個項目的後台守護程序,需要多線程對mysql數據庫服務進行操作,為了加強守護撐的健壯性,特地連接成功後拔掉網線,然後測試守護程序斷開重新連接的健壯性,可是發現網絡斷開後,重新插上網線,用mysql_real_conncet進行重新連接返回的永遠是假,也就是重新連接失敗,之後我想斷開網絡後重新將mysql連接釋放(mysql_close(MYSQL )),並重新初始化mysql_init((MYSQL )),然後再用mysql_real_conncet()函數進行連接,但是這樣做的後果是mysql_real_connect()報錯,報錯內容為沒有足夠的內存,明明我的電腦還有5個G空閒內存,居然說內存不夠。。。
經過查閱資料,發現有一個叫mysql_options的函數,結合mysql_ping函數,mysql連接斷開後可以自動重新連接:
使用mysql_ping來自動檢查重連。用到兩個函數,一個是mysql_ping,另外一個是mysql_options。具體使用方法是在mysql_real_connect之前,mysql_init之後,使用mysql_options。用法如下:

 char value = 1;
 (void) mysql_init (&mysql);
 mysql_options(&mysql, MYSQL_OPT_RECONNECT, (char *)&value);

結合百度百科的使用方法:
mysql_optins
mysql_ping
這裡寫圖片描述
這裡寫圖片描述
然後在以後mysql_query之前首先使用mysql_ping進行判斷,如果連接已經斷開,會自動重連,或者再查詢失敗後,執行mysql_ping函數,然後自動重新連接mysqlsever.
不過,請注意,自動重新連接也會導致一些副作用,如下:
* 任何活動的交易都被回滾,autocommit模式被置為reset。
* 所有表鎖都釋放
* 所有臨時表是關閉(撤消)
* Session variables are reinitialized to the values of the corresponding variables.會話變量被重新初始化為相應的變量。 這也影響那些隱式聲明的變量,SET NAMES。比如使用This also affects variables that are set implicitly by statements such as SET NAMES.這也影響了變量,是一套由含蓄的聲明,例如訂定的名稱。
* 用戶變量設置都將丟失。
* 編制報表釋放。
* 句柄變量被關閉。
* LAST_INSERT_ID()被重置為0 。
* 使用GET_LOCK()獲得的鎖被釋放

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved