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


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

6.3.2 mysqld_safe — MySQL 伺服器啟動腳本

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

注意

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

在使用 systemd 進行伺服器管理的平台上不使用 mysqld_safe 的一個含義是,不支援在選項檔案中使用 [mysqld_safe][safe_mysqld] 區段,而且可能會導致非預期的行為。

mysqld_safe 嘗試啟動名為 mysqld 的可執行檔。若要覆寫預設行為並明確指定要執行的伺服器名稱,請為 mysqld_safe 指定 --mysqld--mysqld-version 選項。您也可以使用 --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 使用 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=tcmallocmysqld_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 連線時應使用的連接埠號碼。除非伺服器是由 root 作業系統使用者啟動,否則連接埠號碼必須為 1024 或更高。

  • --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 facility/severity。

    使用這些選項來控制 mysqld 記錄已棄用。若要將錯誤記錄輸出寫入系統記錄,請使用 第 7.4.2.8 節,〈錯誤記錄至系統記錄〉中的指示。若要控制 facility,請使用伺服器 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 伺服器。(此內容中的「使用者」是指系統登入帳戶,而不是授權表中列出的 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 安裝目錄執行 mysqld_safe,您就可以將 MySQL 的二進位散發版本安裝在任何地方

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=檔案名稱:將錯誤訊息寫入指定的錯誤檔案。

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

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

如果沒有給定這些選項,則預設為 --skip-syslog

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

注意

mysqld_safe 控制 mysqld 記錄已不建議使用。請改用伺服器的原生 syslog 支援。如需更多資訊,請參閱 章節 7.4.2.8,「將錯誤記錄到系統記錄檔」