3.6.8 自動重新連線控制

當您嘗試將語句傳送至伺服器以執行時,如果 MySQL 用戶端程式庫發現連線已中斷,它可以執行自動重新連線至伺服器。如果啟用自動重新連線,程式庫會嘗試重新連線至伺服器並再次傳送語句一次。

注意

自動重新連線功能已棄用。相關的 MYSQL_OPT_RECONNECT 選項仍然可用,但如果您的應用程式使用該選項呼叫 mysql_get_option()mysql_options() 函式,即使將其設定為 false,現在也會將棄用警告傳回標準錯誤輸出。

預期在未來版本的 MySQL 中移除自動重新連線功能。

自動重新連線預設為停用。

如果連線已中斷,mysql_ping() 的效果取決於自動重新連線狀態。如果啟用自動重新連線,mysql_ping() 會執行重新連線。否則,它會傳回錯誤。

某些用戶端程式可能提供控制自動重新連線的功能。例如,mysql 預設會重新連線,但可以使用 --skip-reconnect 選項來抑制此行為。

如果發生自動重新連線(例如,由於呼叫 mysql_ping()),則不會有明確的指示。若要檢查是否重新連線,請呼叫 mysql_thread_id() 以在呼叫 mysql_ping() 之前取得原始連線識別碼,然後再次呼叫 mysql_thread_id() 以查看識別碼是否已變更。

自動重新連線可能很方便,因為您不需要實作自己的重新連線程式碼,但如果發生重新連線,則伺服器端的連線狀態的數個方面會重設,而且您的應用程式將不會收到通知。

重新連線會如下影響連線相關狀態

  • 回滾任何作用中的交易並重設自動提交模式。

  • 釋放所有資料表鎖定。

  • 關閉(並捨棄)所有 TEMPORARY 資料表。

  • 將會話系統變數重新初始化為對應的全域系統變數的值,包括由諸如 SET NAMES 等語句隱式設定的系統變數。

  • 遺失使用者定義的變數設定。

  • 釋放預先處理的語句。

  • 關閉 HANDLER 變數。

  • LAST_INSERT_ID() 的值重設為 0。

  • 釋放使用 GET_LOCK() 取得的鎖定。

  • 失去用戶端與效能架構 threads 資料表列的關聯性,該資料表列決定連線執行緒檢測。如果用戶端在斷線後重新連線,則會話會與 threads 資料表中的新列相關聯,且執行緒監控狀態可能會有所不同。請參閱threads 資料表

如果發生重新連線,則會重新執行透過使用 MYSQL_INIT_COMMAND 選項呼叫 mysql_options() 指定的任何 SQL 語句。

如果連線中斷,如果伺服器尚未偵測到用戶端不再連線,則與伺服器端連線關聯的會話可能仍在執行中。在這種情況下,原始連線持有的任何鎖定仍然屬於該會話,因此您可能想要透過呼叫 mysql_kill() 來終止它。