標籤:
1,遠端連線與本地串連不同。本地串連因為不受網速等因素的影響,處理速度比較快,所以一般操作資料庫的方式都是採用短串連的形式,也就是串連-操作-關閉。但是遠端連線經過測試發現,串連遠程伺服器上的資料庫耗時比較長,但是實際操作資料庫用時不般不受太大的影響。所以,遠程操作的方式採用長串連形式,也就是串連-操作。。。。。。-操作-關閉,詳細一點,就是開始的時候串連,中間執行若干操作,只有關閉軟體的時候才關閉資料庫。
2,既然遠程用長串連形式,有人會說中間串連斷開了怎麼辦?其中有一個解決的辦法,mysql的C API 提供了一個函數mysql_ping(&msyqlconnect),可以將這個函數放到程式中的適當的位置,週期性檢查資料庫連接是否斷開,若斷開了,這個函數會自動進行串連。但是用這個函數有個前提:在使用mysql_real_connect串連資料庫之後,再使用mysql_options( &mysql, MYSQL_OPT_RECONNECT, … ) 來設定為自動重連。這樣當mysql串連丟失的時候,使用mysql_ping能夠自動重連資料庫。如果是在mysql 5.1.6之前,那麼則應在每次執行完real_connect 之後執行mysql_options( &mysql, MYSQL_OPT_RECONNECT, … ) ,如果是mysql 5.1.6+,則在connect之前執行一次就夠了。
我的具體實現代碼是:
//資料庫連接
int DataBaseOperator::connect(CString address,CString username,CString password,CString port,CString database)
{
if (mysql_real_connect(&mysqlConnect,address,username,password,database,atoi(port),NULL,0))
{
char value = 1;
mysql_options(&mysqlConnect, MYSQL_OPT_RECONNECT, &value);
return 1;
}
else
{
return 0;
}
}
可以另起一個定時器:
加入下面這句:
mysql_ping(&oper.mysqlConnect);
3,即然採用長串連,當時我們希望這個串連的時間越長越好。除了用mysql_ping()之外,我們最好設定一下mysql資料庫的連線逾時時間長度。
下面文字摘自http://blog.chinaunix.net/uid-26758020-id-3307042.html
在Mysql的預設設定中,如果一個資料庫連接超過8小時沒有使用(閑置8小時,即
28800s),mysql server將主動斷開這條串連,後續在該串連上進行的查詢操作都將失敗,將 出現:error 2006 (MySQL server has gone away)!。 查看mysql server逾時時間: msyql> show global variables like ‘%timeout%‘; 設定mysql server逾時時間(以秒為單位): msyql> set global wait_timeout=10; msyql> set global interactive_timeout=10;
有關mysql遠端連線總結