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資料庫的連線超時時長。
下面文字摘自
在mysql的預設設定中,如果乙個資料庫連線超過8小時沒有使用(閒置8小時,即
28800s),mysqlserver將主動斷開這條連線,後續在該連線上進行的查詢操作都將失敗,將
出現:error 2006(mysql server has gone away)!。
msyql> show global variables like '%timeout%';
設定mysql server超時時間(以秒為單位):
msyql> set global wait_timeout=10;
msyql> set global interactive_timeout=10;
補充:2016.3.14日。
當我重新在遠端伺服器上配置mysql時,我的做法是這樣的,因為我用的是免安裝版的,所以直接將我電腦上的mysql資料夾拷貝到伺服器上,然後按照上面的說明,到cmd裡執行mysqld-nt -install提示安裝成功。在服務裡可以找到mysql服務,但是當我啟動服務時,出現1067錯誤。網上遍找解決方法,最後解決是在my.ini裡修改下面兩項:
#設定basedir指向mysql的安裝路徑
basedir=d:\mysql5
datadir=d:\mysql5\data
將這兩個路徑改為當前伺服器上安裝的路徑
mysql遠端連線設定 MySQL遠端連線設定
這只是乙個簡單mysql設定。但很多圖簡單,卻忽略了安全性。所以對設定中的細節和含義需要弄到清清楚楚才行。這只是乙個簡單mysql設定。但很多圖簡單,卻忽略了安全性。所以對設定中的細節和含義需要弄到清清楚楚才行。mysql遠端連線的設定問題 下面是步驟 1 登陸本地的mysql server mys...
mysql 遠端連線失敗 mysql 遠端連線失敗
一 mysql 禁止 ip 遠端連線 mysql 庫 user表中 host 為 localhost 修改為 允許所有 ip 連線 或者 新增一條資料 host 為允許連線的 ip 二 授權某個使用者可以遠端連線 以root為例 grant all privileges on to root ide...
mysql遠端連線條件 MySql 遠端連線的條件
1 首先看伺服器防火牆 引用 centos 7.0預設使用的是firewall作為防火牆,使用iptables必須重新設定一下 1 直接關閉防火牆 systemctl stop firewalld.service 停止firewall systemctl disable firewalld.serv...