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


15.7.8.8 RESTART 陳述式

RESTART

此陳述式會停止並重新啟動 MySQL 伺服器。它需要 SHUTDOWN 權限。

當無法或不方便從伺服器主機取得 MySQL 伺服器的命令列存取權以重新啟動它時,可以使用 RESTART。例如,可以在執行階段使用 SET PERSIST_ONLY 對只能在伺服器啟動時設定的系統變數進行組態變更,但仍然必須重新啟動伺服器,這些變更才會生效。RESTART 陳述式提供了一種從用戶端連線執行此操作的方式,而無需伺服器主機上的命令列存取權。

注意

執行 RESTART 陳述式後,用戶端可以預期目前的連線會遺失。如果啟用自動重新連線,則伺服器重新啟動後會重新建立連線。否則,必須手動重新建立連線。

成功的 RESTART 操作要求 mysqld 在具有監控程序的環境中執行,該程序可偵測為重新啟動目的而執行的伺服器關閉

  • 在有監控程序的情況下,RESTART 會導致 mysqld 終止,以便監控程序可以判斷它應該啟動新的 mysqld 執行個體。

  • 如果沒有監控程序,RESTART 會失敗並出現錯誤。

這些平台為 RESTART 陳述式提供必要的監控支援

  • mysqld 作為 Windows 服務或獨立程式啟動時的 Windows。(mysqld 會分叉,而一個進程會作為另一個進程的監視器,而另一個進程則作為伺服器。)

  • 使用 systemd 或 mysqld_safe 管理 mysqld 的 Unix 和類 Unix 系統。

設定監控環境,使 mysqld 啟用 RESTART 陳述式

  1. 在啟動 mysqld 之前,將 MYSQLD_PARENT_PID 環境變數設定為啟動 mysqld 的進程的進程 ID 值。

  2. mysqld 因為使用 RESTART 陳述式而執行關閉時,它會傳回結束代碼 16。

  3. 當監控程序偵測到結束代碼 16 時,它會再次啟動 mysqld。否則,它會結束。

以下是以 bash Shell 實作的最小範例

#!/bin/bash

export MYSQLD_PARENT_PID=$$

export MYSQLD_RESTART_EXIT=16

while true ; do
  bin/mysqld mysqld options here
  if [ $? -ne $MYSQLD_RESTART_EXIT ]; then
    break
  fi
done

在 Windows 上,用來實作 RESTART 的分叉會使判斷要附加以進行偵錯的伺服器進程更加困難。為了減輕此問題,除了設定偵錯環境的其他動作之外,使用 --gdb 啟動伺服器會抑制分叉。在非偵錯設定中,可以使用 --no-monitor 僅為了抑制分叉監控程序。對於使用 --gdb--no-monitor 啟動的伺服器,執行 RESTART 會導致伺服器直接結束而不重新啟動。

Com_restart 狀態變數會追蹤 RESTART 陳述式的數量。因為狀態變數會針對每個伺服器啟動進行初始化,而且不會跨重新啟動持續存在,因此 Com_restart 通常的值為零,但是如果執行了 RESTART 陳述式但失敗,則可以為非零值。