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
顯示說明訊息並結束。
-
命令列格式 --basedir=dir_name
類型 目錄名稱 MySQL 安裝目錄的路徑。
-
命令列格式 --core-file-size=size
類型 字串 mysqld 應該能夠建立的核心檔案大小。此選項的值會傳遞給 ulimit -c。
注意innodb_buffer_pool_in_core_file
變數可以用於減少支援此功能的作業系統上的核心檔案大小。有關詳細資訊,請參閱第 17.8.3.7 節,「從核心檔案中排除或包含緩衝池頁面」。 -
命令列格式 --datadir=dir_name
類型 目錄名稱 資料目錄的路徑。
--defaults-extra-file=
file_name
命令列格式 --defaults-extra-file=file_name
類型 檔案名稱 除了常用的選項檔案之外,還會讀取此選項檔案。如果檔案不存在或無法存取,伺服器會以錯誤結束。如果
file_name
不是絕對路徑名稱,則會根據目前目錄進行解譯。如果使用此選項,則此選項必須是命令列上的第一個選項。有關此選項和其他選項檔案選項的詳細資訊,請參閱第 6.2.2.3 節,「影響選項檔案處理的命令列選項」。
-
命令列格式 --defaults-file=file_name
類型 檔案名稱 僅使用指定的選項檔案。如果檔案不存在或無法存取,伺服器會以錯誤結束。如果
file_name
不是絕對路徑名稱,則會根據目前目錄進行解譯。如果使用此選項,則此選項必須是命令列上的第一個選項。有關此選項和其他選項檔案選項的詳細資訊,請參閱第 6.2.2.3 節,「影響選項檔案處理的命令列選項」。
-
命令列格式 --ledir=dir_name
類型 目錄名稱 如果 mysqld_safe 找不到伺服器,請使用此選項來指出伺服器所在的目錄路徑名稱。
此選項僅在命令列中接受,而不在選項檔案中接受。在使用 systemd 的平台上,可以在
MYSQLD_OPTS
的值中指定該值。請參閱第 2.5.9 節,「使用 systemd 管理 MySQL 伺服器」。 -
命令列格式 --log-error=file_name
類型 檔案名稱 將錯誤日誌寫入指定的檔案。請參閱第 7.4.2 節,「錯誤日誌」。
-
命令列格式 --mysqld-safe-log-timestamps=type
類型 列舉 預設值 utc
有效值 system
hyphen
legacy
此選項控制 mysqld_safe 產生的日誌輸出中時間戳記的格式。以下清單說明允許的值。對於任何其他值,mysqld_safe 會記錄警告並使用
UTC
格式。UTC
、utc
ISO 8601 UTC 格式(與伺服器的
--log_timestamps=UTC
相同)。這是預設值。SYSTEM
、system
ISO 8601 本地時間格式(與伺服器的
--log_timestamps=SYSTEM
相同)。HYPHEN
、hyphen
YY-MM-DD h:mm:ss
格式,如適用於 MySQL 5.6 的 mysqld_safe 中所示。LEGACY
、legacy
YYMMDD hh:mm:ss
格式,如 MySQL 5.6 之前的 mysqld_safe 中所示。
-
命令列格式 --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
,則會將其路徑名稱新增至 mysqld 的LD_PRELOAD
值開頭。如果找不到tcmalloc
,mysqld_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=file_name
類型 檔案名稱 您要啟動的伺服器程式名稱(位於
ledir
目錄中)。如果您使用 MySQL 二進位發行版,但資料目錄位於二進位發行版之外,則需要此選項。如果 mysqld_safe 找不到伺服器,請使用--ledir
選項來指定伺服器所在的目錄路徑名稱。此選項僅在命令列中接受,而不在選項檔案中接受。在使用 systemd 的平台上,可以在
MYSQLD_OPTS
的值中指定該值。請參閱第 2.5.9 節,「使用 systemd 管理 MySQL 伺服器」。 -
命令列格式 --mysqld-version=suffix
類型 字串 此選項與
--mysqld
選項類似,但您僅指定伺服器程式名稱的後綴。基本名稱假設為 mysqld。例如,如果您使用--mysqld-version=debug
,mysqld_safe 會啟動ledir
目錄中的 mysqld-debug 程式。如果--mysqld-version
的引數為空,則 mysqld_safe 會使用ledir
目錄中的 mysqld。此選項僅在命令列中接受,而不在選項檔案中接受。在使用 systemd 的平台上,可以在
MYSQLD_OPTS
的值中指定該值。請參閱第 2.5.9 節,「使用 systemd 管理 MySQL 伺服器」。 -
命令列格式 --nice=priority
類型 數值 使用
nice
程式將伺服器的排程優先順序設定為給定的值。 -
命令列格式 --no-defaults
類型 字串 不讀取任何選項檔案。如果因為從選項檔案讀取不明的選項而導致程式啟動失敗,則可以使用
--no-defaults
來防止讀取它們。如果使用此選項,它必須是命令列上的第一個選項。有關此選項和其他選項檔案選項的詳細資訊,請參閱第 6.2.2.3 節,「影響選項檔案處理的命令列選項」。
-
命令列格式 --open-files-limit=count
類型 字串 mysqld 應該能夠開啟的檔案數量。選項值會傳遞給 ulimit -n。
注意您必須以
root
身分啟動 mysqld_safe,此選項才能正常運作。 -
命令列格式 --pid-file=file_name
類型 檔案名稱 mysqld 應使用的程序 ID 檔案的路徑名稱。
-
命令列格式 --plugin-dir=dir_name
類型 目錄名稱 外掛程式目錄的路徑名稱。
-
命令列格式 --port=number
類型 數值 伺服器在接聽 TCP/IP 連線時應使用的連接埠號碼。連接埠號碼必須為 1024 或更高,除非伺服器是由
root
作業系統使用者啟動。 -
命令列格式 --skip-kill-mysqld
啟動時不要嘗試終止任何游離的 mysqld 程序。此選項僅在 Linux 上有效。
-
命令列格式 --socket=file_name
類型 檔案名稱 伺服器在接聽本機連線時應使用的 Unix socket 檔案。
-
命令列格式 --syslog
已棄用 是 命令列格式 --skip-syslog
已棄用 是 --syslog
會導致錯誤訊息被傳送到支援 logger 程式的系統上的syslog
。--skip-syslog
會抑制syslog
的使用;訊息會被寫入錯誤日誌檔案。當
syslog
用於錯誤日誌記錄時,所有日誌訊息都會使用daemon.err
工具/嚴重性。使用這些選項來控制 mysqld 日誌記錄已被棄用。若要將錯誤日誌輸出寫入系統日誌,請使用 第 7.4.2.8 節,「將錯誤記錄到系統日誌」 中的指示。若要控制工具,請使用伺服器
log_syslog_facility
系統變數。 -
命令列格式 --syslog-tag=tag
已棄用 是 對於記錄到
syslog
,來自 mysqld_safe 和 mysqld 的訊息會分別使用mysqld_safe
和mysqld
的識別符號寫入。若要指定識別符號的後綴,請使用--syslog-tag=
,這會將識別符號修改為tag
mysqld_safe-
和tag
mysqld-
。tag
使用此選項來控制 mysqld 日誌記錄已被棄用。請改為使用伺服器
log_syslog_tag
系統變數。請參閱 第 7.4.2.8 節,「將錯誤記錄到系統日誌」。 -
命令列格式 --timezone=timezone
類型 字串 將
TZ
時區環境變數設定為給定的選項值。請查閱您的作業系統文件以了解合法的時區指定格式。 -
命令列格式 --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 會在其工作目錄下尋找
bin
和data
目錄。對於原始碼發行版,它會尋找libexec
和var
目錄。如果您從 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 會嘗試使用 sleep 和 date 系統工具來判斷每秒嘗試啟動的次數。如果這些工具存在,且每秒嘗試啟動的次數大於 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 節,「將錯誤記錄到系統日誌」。