當您嘗試將語句傳送至伺服器以執行時,如果 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()
來終止它。