文件首頁
MySQL 9.0 參考手冊
相關文件 下載本手冊
PDF (美式信紙) - 40.0Mb
PDF (A4) - 40.1Mb
手冊頁 (TGZ) - 258.2Kb
手冊頁 (Zip) - 365.3Kb
Info (Gzip) - 4.0Mb
Info (Zip) - 4.0Mb


15.7.8.8 RESTART 陳述式

RESTART

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

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

注意

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

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

  • 在存在監控程序的情況下,RESTART 會導致 mysqld 終止,以便監控程序可以判斷它應該啟動一個新的 mysqld 實例。

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

以下平台為 RESTART 陳述式提供必要的監控支援:

  • Windows,當 mysqld 作為 Windows 服務或獨立執行時。(mysqld 會進行 fork,其中一個進程充當另一個進程的監控器,而另一個進程則充當伺服器。)

  • 使用 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 的 fork 操作使得更難以確定要附加除錯的伺服器進程。為了減輕這種情況,使用 --gdb 啟動伺服器除了執行其他設定除錯環境的操作外,還會抑制 fork 操作。在非除錯設定中,--no-monitor 可以僅用於抑制 fork 監控程序。對於使用 --gdb--no-monitor 啟動的伺服器,執行 RESTART 會導致伺服器僅僅退出而不重新啟動。

Com_restart 狀態變數會追蹤 RESTART 陳述式的數量。由於狀態變數是在每次伺服器啟動時初始化,且不會在重新啟動時保留,Com_restart 通常的值為零,但如果執行了 RESTART 陳述式但失敗,則該值可能不為零。