文件首頁
MySQL 8.4 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 39.9Mb
PDF (A4) - 40.0Mb
手冊頁 (TGZ) - 258.5Kb
手冊頁 (Zip) - 365.5Kb
資訊 (Gzip) - 4.0Mb
資訊 (Zip) - 4.0Mb


MySQL 8.4 參考手冊  /  ...  /  伺服器關閉程序

7.1.19 伺服器關閉程序

伺服器關閉程序按如下方式進行

  1. 啟動關閉程序。

    這可以透過幾種方式啟動。例如,具有 SHUTDOWN 權限的使用者可以執行 mysqladmin shutdown 命令。mysqladmin 可用於 MySQL 支援的任何平台。其他作業系統特定的關閉啟動方法也是可能的:伺服器在收到 SIGTERM 訊號時會在 Unix 上關閉。在 Windows 上以服務執行的伺服器,會在服務管理員告知時關閉。

  2. 伺服器會視需要建立關閉執行緒。

    根據關閉的啟動方式,伺服器可能會建立執行緒來處理關閉程序。如果關閉是由用戶端請求的,則會建立關閉執行緒。如果關閉是收到 SIGTERM 訊號的結果,則訊號執行緒可能會自行處理關閉,或者可能會建立單獨的執行緒來執行此操作。如果伺服器嘗試建立關閉執行緒但無法建立 (例如,如果記憶體已耗盡),則它會發出診斷訊息,該訊息會出現在錯誤日誌中。

    Error: Can't create thread to kill server
  3. 伺服器停止接受新的連線。

    為了防止在關閉期間啟動新的活動,伺服器會關閉它通常監聽連線的網路介面的處理程式,以停止接受新的用戶端連線:TCP/IP 連接埠、Unix 通訊端檔案、Windows 具名管道以及 Windows 上的共用記憶體。

  4. 伺服器終止目前的活動。

    對於與用戶端連線相關聯的每個執行緒,伺服器會中斷與用戶端的連線,並將執行緒標記為已終止。執行緒會在注意到它們被標記時終止。閒置連線的執行緒會快速終止。目前正在處理陳述式的執行緒會定期檢查其狀態,並且需要較長的時間才能終止。如需有關執行緒終止的其他資訊,請參閱 第 15.7.8.4 節,「KILL 陳述式」,特別是有關已終止 REPAIR TABLEOPTIMIZE TABLE 操作於 MyISAM 表格上的指示。

    對於具有開啟交易的執行緒,會復原交易。如果執行緒正在更新非交易表格,則多列 UPDATEINSERT 等操作可能會使表格部分更新,因為該操作可能會在完成前終止。

    如果伺服器是複寫來源伺服器,則它會將與目前連線的複本相關聯的執行緒視為其他用戶端執行緒。也就是說,每個執行緒都會被標記為已終止,並且會在下次檢查其狀態時退出。

    如果伺服器是複本伺服器,它會在將用戶端執行緒標記為已終止之前,先停止複製 I/O 和 SQL 執行緒 (如果它們正在活動中)。SQL 執行緒會被允許完成其目前的語句 (以避免造成複製問題),然後停止。如果 SQL 執行緒在這一點上處於交易的中間,伺服器會等待直到目前的複製事件群組 (如果有的話) 執行完畢,或直到使用者發出 KILL QUERYKILL CONNECTION 語句。另請參閱第 15.4.2.5 節,「STOP REPLICA 語句」。由於非交易語句無法回滾,為了保證崩潰安全的複製,應僅使用交易表。

    注意

    為了保證複本上的崩潰安全,您必須啟用 --relay-log-recovery 來執行複本。

    另請參閱第 19.2.4 節,「中繼日誌和複製元數據儲存庫」)。

  5. 伺服器會關閉或關閉儲存引擎。

    在這個階段,伺服器會清除表快取並關閉所有開啟的表。

    每個儲存引擎都會執行其管理的表所需的任何動作。InnoDB 會將其緩衝池刷新到磁碟 (除非 innodb_fast_shutdown 為 2),將目前的 LSN 寫入表空間,並終止其自身的內部執行緒。MyISAM 會刷新表的任何未決索引寫入。

  6. 伺服器會退出。

為了向管理程序提供資訊,伺服器會傳回以下列表中描述的其中一個退出代碼。括號中的短語表示 systemd 響應代碼所採取的動作 (對於使用 systemd 管理伺服器的平台)。

  • 0 = 成功終止 (不進行重新啟動)

  • 1 = 不成功終止 (不進行重新啟動)

  • 2 = 不成功終止 (進行重新啟動)