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


MySQL 8.4 參考手冊  /  ...  /  mysqld_safe — MySQL 伺服器啟動腳本

6.3.2 mysqld_safe — MySQL 伺服器啟動腳本

mysqld_safe 是在 Unix 上啟動 mysqld 伺服器的建議方式。mysqld_safe 會新增一些安全功能,例如在發生錯誤時重新啟動伺服器,以及將執行階段資訊記錄到錯誤日誌。錯誤日誌的說明將在本節稍後提供。

注意

對於某些 Linux 平台,從 RPM 或 Debian 套件安裝 MySQL 包括用於管理 MySQL 伺服器啟動和關閉的 systemd 支援。在這些平台上,由於不需要,因此不會安裝 mysqld_safe。如需更多資訊,請參閱第 2.5.9 節「使用 systemd 管理 MySQL 伺服器」

在將 systemd 用於伺服器管理的平台上不使用 mysqld_safe 的一個含義是,選項檔案中不支援使用 [mysqld_safe][safe_mysqld] 區段,並可能導致意外行為。

mysqld_safe 會嘗試啟動名為 mysqld 的可執行檔。若要覆寫預設行為並明確指定您要執行的伺服器名稱,請將 --mysqld--mysqld-version 選項指定給 mysqld_safe。您也可以使用 --ledir 來指示 mysqld_safe 應該在哪裡尋找伺服器的目錄。

mysqld_safe 的許多選項與 mysqld 的選項相同。請參閱第 7.1.7 節「伺服器命令選項」

如果 mysqld_safe 不知道的選項是在命令列上指定,則會傳遞給 mysqld,但如果是在選項檔案的 [mysqld_safe] 群組中指定,則會忽略。請參閱第 6.2.2.2 節「使用選項檔案」

mysqld_safe 會從選項檔案中的 [mysqld][server][mysqld_safe] 區段讀取所有選項。例如,如果您指定像這樣的 [mysqld] 區段,mysqld_safe 會找到並使用 --log-error 選項

[mysqld]
log-error=error.log

為了回溯相容性,mysqld_safe 也會讀取 [safe_mysqld] 區段,但為了符合目前的做法,您應該將此類區段重新命名為 [mysqld_safe]

mysqld_safe 接受命令列和選項檔案中的選項,如下表所述。如需 MySQL 程式使用的選項檔案相關資訊,請參閱第 6.2.2.2 節「使用選項檔案」

表格 6.7 mysqld_safe 選項

選項名稱 說明
--basedir MySQL 安裝目錄的路徑
--core-file-size mysqld 應該能夠建立的核心檔案大小
--datadir 資料目錄的路徑
--defaults-extra-file 除了慣用選項檔案外,也讀取指定的選項檔案
--defaults-file 只讀取指定的選項檔案
--help 顯示說明訊息並結束
--ledir 伺服器所在目錄的路徑
--log-error 將錯誤日誌寫入指定的檔案
--malloc-lib 要用於 mysqld 的替代 malloc 程式庫
--mysqld 要啟動的伺服器程式名稱 (位於 ledir 目錄中)
--mysqld-safe-log-timestamps 用於記錄的時戳格式
--mysqld-version 伺服器程式名稱的後綴
--nice 使用友善的程式來設定伺服器排程優先權
--no-defaults 不讀取任何選項檔案
--open-files-limit mysqld 應該能夠開啟的檔案數量
--pid-file 伺服器程序 ID 檔案的路徑名稱
--plugin-dir 外掛程式安裝的目錄
--port 用於監聽 TCP/IP 連線的連接埠號碼
--skip-kill-mysqld 不嘗試終止流浪的 mysqld 程序
--skip-syslog 不將錯誤訊息寫入 syslog;使用錯誤日誌檔案
--socket 用於監聽 Unix socket 連線的 Socket 檔案
--syslog 將錯誤訊息寫入 syslog
--syslog-tag 寫入 syslog 的訊息的標籤後綴
--timezone 將 TZ 時區環境變數設定為指定的數值
--user 以使用者名稱 user_name 或數字使用者 ID user_id 的身分執行 mysqld

  • --help

    命令列格式 --help

    顯示說明訊息並結束。

  • --basedir=dir_name

    命令列格式 --basedir=dir_name
    類型 目錄名稱

    MySQL 安裝目錄的路徑。

  • --core-file-size=size

    命令列格式 --core-file-size=size
    類型 字串

    mysqld 應該能夠建立的核心檔案大小。此選項的值會傳遞給 ulimit -c

    注意

    innodb_buffer_pool_in_core_file 變數可以用於減少支援此功能的作業系統上的核心檔案大小。有關詳細資訊,請參閱第 17.8.3.7 節,「從核心檔案中排除或包含緩衝池頁面」

  • --datadir=dir_name

    命令列格式 --datadir=dir_name
    類型 目錄名稱

    資料目錄的路徑。

  • --defaults-extra-file=file_name

    命令列格式 --defaults-extra-file=file_name
    類型 檔案名稱

    除了常用的選項檔案之外,還會讀取此選項檔案。如果檔案不存在或無法存取,伺服器會以錯誤結束。如果 file_name 不是絕對路徑名稱,則會根據目前目錄進行解譯。如果使用此選項,則此選項必須是命令列上的第一個選項。

    有關此選項和其他選項檔案選項的詳細資訊,請參閱第 6.2.2.3 節,「影響選項檔案處理的命令列選項」

  • --defaults-file=file_name

    命令列格式 --defaults-file=file_name
    類型 檔案名稱

    僅使用指定的選項檔案。如果檔案不存在或無法存取,伺服器會以錯誤結束。如果 file_name 不是絕對路徑名稱,則會根據目前目錄進行解譯。如果使用此選項,則此選項必須是命令列上的第一個選項。

    有關此選項和其他選項檔案選項的詳細資訊,請參閱第 6.2.2.3 節,「影響選項檔案處理的命令列選項」

  • --ledir=dir_name

    命令列格式 --ledir=dir_name
    類型 目錄名稱

    如果 mysqld_safe 找不到伺服器,請使用此選項來指出伺服器所在的目錄路徑名稱。

    此選項僅在命令列中接受,而不在選項檔案中接受。在使用 systemd 的平台上,可以在 MYSQLD_OPTS 的值中指定該值。請參閱第 2.5.9 節,「使用 systemd 管理 MySQL 伺服器」

  • --log-error=file_name

    命令列格式 --log-error=file_name
    類型 檔案名稱

    將錯誤日誌寫入指定的檔案。請參閱第 7.4.2 節,「錯誤日誌」

  • --mysqld-safe-log-timestamps

    命令列格式 --mysqld-safe-log-timestamps=type
    類型 列舉
    預設值 utc
    有效值

    system

    hyphen

    legacy

    此選項控制 mysqld_safe 產生的日誌輸出中時間戳記的格式。以下清單說明允許的值。對於任何其他值,mysqld_safe 會記錄警告並使用 UTC 格式。

    • UTCutc

      ISO 8601 UTC 格式(與伺服器的 --log_timestamps=UTC 相同)。這是預設值。

    • SYSTEMsystem

      ISO 8601 本地時間格式(與伺服器的 --log_timestamps=SYSTEM 相同)。

    • HYPHENhyphen

      YY-MM-DD h:mm:ss 格式,如適用於 MySQL 5.6 的 mysqld_safe 中所示。

    • LEGACYlegacy

      YYMMDD hh:mm:ss 格式,如 MySQL 5.6 之前的 mysqld_safe 中所示。

  • --malloc-lib=[lib_name]

    命令列格式 --malloc-lib=[lib-name]
    類型 字串

    用於記憶體配置的程式庫名稱,而不是系統 malloc() 程式庫。此選項值必須是目錄 /usr/lib/usr/lib64/usr/lib/i386-linux-gnu/usr/lib/x86_64-linux-gnu 之一。

    --malloc-lib 選項的工作方式是修改 LD_PRELOAD 環境值,以影響動態連結,讓載入器在 mysqld 執行時找到記憶體配置程式庫

    • 如果未指定此選項,或未指定值 (--malloc-lib=),則不會修改 LD_PRELOAD,且不會嘗試使用 tcmalloc

    • 在 MySQL 8.0.21 之前,如果此選項指定為 --malloc-lib=tcmalloc,則 mysqld_safe 會在 /usr/lib 中尋找 tcmalloc 程式庫。如果找到 tmalloc,則會將其路徑名稱新增至 mysqldLD_PRELOAD 值開頭。如果找不到 tcmallocmysqld_safe 會中止並顯示錯誤。

      從 MySQL 8.0.21 開始,tcmalloc 不是 --malloc-lib 選項的允許值。

    • 如果此選項指定為 --malloc-lib=/path/to/some/library,則會將該完整路徑新增至 LD_PRELOAD 值開頭。如果完整路徑指向不存在或無法讀取的檔案,mysqld_safe 會中止並顯示錯誤。

    • mysqld_safe 將路徑名稱新增至 LD_PRELOAD 的情況下,它會將路徑新增至變數已有的任何現有值的開頭。

    注意

    在使用 systemd 管理伺服器的系統上,mysqld_safe 不可用。而是透過在 /etc/sysconfig/mysql 中設定 LD_PRELOAD 來指定配置程式庫。

    Linux 使用者可以在已在 /usr/lib 中安裝 tcmalloc 套件的任何平台上使用 libtcmalloc_minimal.so 程式庫,方法是將這些行新增至 my.cnf 檔案中

    [mysqld_safe]
    malloc-lib=tcmalloc

    若要使用特定的 tcmalloc 程式庫,請指定其完整路徑名稱。範例

    [mysqld_safe]
    malloc-lib=/opt/lib/libtcmalloc_minimal.so
  • --mysqld=prog_name

    命令列格式 --mysqld=file_name
    類型 檔案名稱

    您要啟動的伺服器程式名稱(位於 ledir 目錄中)。如果您使用 MySQL 二進位發行版,但資料目錄位於二進位發行版之外,則需要此選項。如果 mysqld_safe 找不到伺服器,請使用 --ledir 選項來指定伺服器所在的目錄路徑名稱。

    此選項僅在命令列中接受,而不在選項檔案中接受。在使用 systemd 的平台上,可以在 MYSQLD_OPTS 的值中指定該值。請參閱第 2.5.9 節,「使用 systemd 管理 MySQL 伺服器」

  • --mysqld-version=suffix

    命令列格式 --mysqld-version=suffix
    類型 字串

    此選項與 --mysqld 選項類似,但您僅指定伺服器程式名稱的後綴。基本名稱假設為 mysqld。例如,如果您使用 --mysqld-version=debugmysqld_safe 會啟動 ledir 目錄中的 mysqld-debug 程式。如果 --mysqld-version 的引數為空,則 mysqld_safe 會使用 ledir 目錄中的 mysqld

    此選項僅在命令列中接受,而不在選項檔案中接受。在使用 systemd 的平台上,可以在 MYSQLD_OPTS 的值中指定該值。請參閱第 2.5.9 節,「使用 systemd 管理 MySQL 伺服器」

  • --nice=priority

    命令列格式 --nice=priority
    類型 數值

    使用 nice 程式將伺服器的排程優先順序設定為給定的值。

  • --no-defaults

    命令列格式 --no-defaults
    類型 字串

    不讀取任何選項檔案。如果因為從選項檔案讀取不明的選項而導致程式啟動失敗,則可以使用 --no-defaults 來防止讀取它們。如果使用此選項,它必須是命令列上的第一個選項。

    有關此選項和其他選項檔案選項的詳細資訊,請參閱第 6.2.2.3 節,「影響選項檔案處理的命令列選項」

  • --open-files-limit=count

    命令列格式 --open-files-limit=count
    類型 字串

    mysqld 應該能夠開啟的檔案數量。選項值會傳遞給 ulimit -n

    注意

    您必須以 root 身分啟動 mysqld_safe,此選項才能正常運作。

  • --pid-file=file_name

    命令列格式 --pid-file=file_name
    類型 檔案名稱

    mysqld 應使用的程序 ID 檔案的路徑名稱。

  • --plugin-dir=dir_name

    命令列格式 --plugin-dir=dir_name
    類型 目錄名稱

    外掛程式目錄的路徑名稱。

  • --port=port_num

    命令列格式 --port=number
    類型 數值

    伺服器在接聽 TCP/IP 連線時應使用的連接埠號碼。連接埠號碼必須為 1024 或更高,除非伺服器是由 root 作業系統使用者啟動。

  • --skip-kill-mysqld

    命令列格式 --skip-kill-mysqld

    啟動時不要嘗試終止任何游離的 mysqld 程序。此選項僅在 Linux 上有效。

  • --socket=path

    命令列格式 --socket=file_name
    類型 檔案名稱

    伺服器在接聽本機連線時應使用的 Unix socket 檔案。

  • --syslog, --skip-syslog

    命令列格式 --syslog
    已棄用
    命令列格式 --skip-syslog
    已棄用

    --syslog 會導致錯誤訊息被傳送到支援 logger 程式的系統上的 syslog--skip-syslog 會抑制 syslog 的使用;訊息會被寫入錯誤日誌檔案。

    syslog 用於錯誤日誌記錄時,所有日誌訊息都會使用 daemon.err 工具/嚴重性。

    使用這些選項來控制 mysqld 日誌記錄已被棄用。若要將錯誤日誌輸出寫入系統日誌,請使用 第 7.4.2.8 節,「將錯誤記錄到系統日誌」 中的指示。若要控制工具,請使用伺服器 log_syslog_facility 系統變數。

  • --syslog-tag=tag

    命令列格式 --syslog-tag=tag
    已棄用

    對於記錄到 syslog,來自 mysqld_safemysqld 的訊息會分別使用 mysqld_safemysqld 的識別符號寫入。若要指定識別符號的後綴,請使用 --syslog-tag=tag,這會將識別符號修改為 mysqld_safe-tagmysqld-tag

    使用此選項來控制 mysqld 日誌記錄已被棄用。請改為使用伺服器 log_syslog_tag 系統變數。請參閱 第 7.4.2.8 節,「將錯誤記錄到系統日誌」

  • --timezone=timezone

    命令列格式 --timezone=timezone
    類型 字串

    TZ 時區環境變數設定為給定的選項值。請查閱您的作業系統文件以了解合法的時區指定格式。

  • --user={user_name|user_id}

    命令列格式 --user={user_name|user_id}
    類型 字串
    類型 數值

    以名稱為 user_name 或數值使用者 ID 為 user_id 的使用者身分執行 mysqld 伺服器。(在此上下文中,「使用者」指的是系統登入帳戶,而不是 grant 資料表中列出的 MySQL 使用者。)

如果您使用 mysqld_safe 搭配 --defaults-file--defaults-extra-file 選項來命名選項檔案,則該選項必須是命令列上給定的第一個選項,否則不會使用該選項檔案。例如,以下命令不會使用指定的選項檔案

mysql> mysqld_safe --port=port_num --defaults-file=file_name

請改為使用以下命令

mysql> mysqld_safe --defaults-file=file_name --port=port_num

mysqld_safe 指令碼的編寫方式使其通常可以啟動從 MySQL 的原始碼或二進位發行版安裝的伺服器,即使這些類型的發行版通常會將伺服器安裝在稍微不同的位置。(請參閱 第 2.1.5 節,「安裝配置」。)mysqld_safe 預期以下條件之一為真

  • 可以找到相對於工作目錄(從該目錄調用 mysqld_safe 的目錄)的伺服器和資料庫。對於二進位發行版,mysqld_safe 會在其工作目錄下尋找 bindata 目錄。對於原始碼發行版,它會尋找 libexecvar 目錄。如果您從 MySQL 安裝目錄(例如,二進位發行版的 /usr/local/mysql)執行 mysqld_safe,則應滿足此條件。

  • 如果無法找到相對於工作目錄的伺服器和資料庫,mysqld_safe 會嘗試按絕對路徑名稱找到它們。典型的位置是 /usr/local/libexec/usr/local/var。實際位置取決於在建置時配置到發行版中的值。如果 MySQL 安裝在設定時指定的位置,則它們應該是正確的。

由於 mysqld_safe 會嘗試找到相對於其自身工作目錄的伺服器和資料庫,因此您可以將 MySQL 的二進位發行版安裝在任何位置,只要您從 MySQL 安裝目錄執行 mysqld_safe 即可

cd mysql_installation_directory
bin/mysqld_safe &

如果 mysqld_safe 失敗,即使是從 MySQL 安裝目錄中調用,也請指定 --ledir--datadir 選項,以指示伺服器和資料庫在您系統上的位置。

mysqld_safe 會嘗試使用 sleepdate 系統工具來判斷每秒嘗試啟動的次數。如果這些工具存在,且每秒嘗試啟動的次數大於 5 次,mysqld_safe 會等待完整的 1 秒後再重新啟動。這樣做的目的是為了防止重複失敗時過度使用 CPU。(錯誤 #11761530,錯誤 #54035)

當您使用 mysqld_safe 來啟動 mysqld 時,mysqld_safe 會安排將其本身和 mysqld 的錯誤(和通知)訊息發送到相同的目的地。

有幾個 mysqld_safe 選項可以用來控制這些訊息的目的地。

  • --log-error=file_name:將錯誤訊息寫入指定的錯誤檔案。

  • --syslog:在支援 logger 程式的系統上,將錯誤訊息寫入 syslog

  • --skip-syslog:不要將錯誤訊息寫入 syslog。訊息會寫入預設的錯誤日誌檔案(資料目錄中的 主機名稱.err),或者如果給定 --log-error 選項,則會寫入指定名稱的檔案。

如果未提供這些選項中的任何一個,預設值為 --skip-syslog

mysqld_safe 寫入訊息時,通知會發送到記錄目的地(syslog 或錯誤日誌檔案)和 stdout。錯誤會發送到記錄目的地和 stderr

注意

mysqld_safe 控制 mysqld 的記錄已被棄用。請改用伺服器的原生 syslog 支援。如需更多資訊,請參閱 第 7.4.2.8 節,「將錯誤記錄到系統日誌」