簡體   English   中英

MySQL重新連接標志值是什么意思?

[英]What does the MySQL reconnect flag value mean?

我的代碼看起來很像這樣,只有錯誤處理(不會被觸發)。 它在多線程應用程序中調用(每個需要連接的線程一次),在Ubuntu 13.10.1上使用MySQL 5.5.37-0:

DBConnection = mysql_init(NULL);
mysql_options((MYSQL *) DBConnection, MYSQL_SET_CHARSET_NAME, "utf8");
mysql_real_connect(DBConnection, ...);
my_bool reconnect = true;
mysql_options(DBConnection, MYSQL_OPT_RECONNECT, &reconnect);
mysql_query(DBConnection, "SET wait_timeout=60"); //!!!
printf("reconnect flag %d", DBConnection->reconnect);

我已經斷開斷開連接超時,所以我可以測試重新連接代碼(1分鍾而不是默認的8小時)。 編輯:我在每個頁面的 real_connect之后設置_RECONNECT選項,因為它對我來說更可靠。

在mysql.h中,相關代碼說:

my_bool reconnect;  /* set to 1 if automatic reconnect */

“重新連接”字段的值似乎是隨機的。 從上面的日志中抓取值我看到:100,104,106,108,108,38,43,56,59,63,64,88,92,98

這似乎沒有記錄, 相關頁面只是說:

MYSQL此結構表示一個數據庫連接的句柄。 它幾乎用於所有MySQL功能。 不要試圖復制MYSQL結構。 無法保證此類副本可用。

“丟失連接”幫助頁面顯示

在MySQL 5.0.19之前,即使MYSQL結構中的重新連接標志等於1,

不管我是否使用上面的mysql_options()調用來設置它,我認為我從未見過它實際設置為1。 有誰知道這意味着什么,以及它對實際價值是否有任何意義?

重新連接一段時間后,我一直在追逐一些奇怪的行為,我想知道這是否與它有關(有時自動重新連接失敗,但手動斷開連接並重新連接工作)。


我已經交換了訂單並使用了mysql_options而不是SQL,並且沒有對“never 0或1”結果進行可見的更改。 新代碼:

DBConnection = mysql_init(NULL);
mysql_options((MYSQL *) DBConnection, MYSQL_SET_CHARSET_NAME, "utf8");
my_bool reconnect = true;
mysql_options(DBConnection, MYSQL_OPT_RECONNECT, &reconnect);
mysql_options(DBConnection, MYSQL_OPT_CONNECT_TIMEOUT, "60");
mysql_real_connect(DBConnection, ...);
printf("reconnect flag %d", DBConnection->reconnect);

同樣的結果,但似乎你的確切值會有所不同(我的評論下面使用了不同的運行並得到了不同的值)。 用30個線程啟動我的代碼:101,101,101,106,109,112,112,115,117,118,120,123,47,56,56,59,62,68,80,81, 81,88,88,88,90,91,91,92,93,94,96(從日志文件中獲取這些內容的簡單方法是對其進行排序,因此排序不是最初的排序)。 主要的是它不是“1”,正如手冊所說的那樣。 並且位0並不總是設置。

根據MySQL的版本,自動重新連接行為略有不同; 例如,還有--skip-reconnect選項。 這個頁面解釋了它。

希望這可以幫助。

要連接到服務器,請調用mysql_init()來初始化連接處理程序,然后使用該處理程序調用“mysql_real_connect()”“(使用其他信息,如主機名,用戶名和密碼)。連接后,mysql_real_connect()設置在早於5.0.3的API版本中,重新連接標志值為1,或者在較新版本中為0。此標志的值為1表示如果由於連接丟失而無法執行語句,則嘗試重新連接到放棄之前的服務器。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM