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
顯示說明訊息並結束。
-
命令列格式 --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 連線時應使用的連接埠號碼。除非伺服器是由
root
作業系統使用者啟動,否則連接埠號碼必須為 1024 或更高。 -
命令列格式 --skip-kill-mysqld
啟動時不要嘗試終止任何閒置的 mysqld 處理程序。此選項僅適用於 Linux。
-
命令列格式 --socket=file_name
類型 檔案名稱 伺服器在偵聽本機連線時應使用的 Unix socket 檔案。
-
命令列格式 --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
,來自 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
或數值使用者 IDuser_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 會在其工作目錄下尋找
bin
和data
目錄。對於原始碼散發版本,它會尋找libexec
和var
目錄。如果您從 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 嘗試使用 sleep 和 date 系統公用程式來判斷它每秒嘗試啟動的次數。如果這些公用程式存在,且每秒嘗試啟動的次數大於 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,「將錯誤記錄到系統記錄檔」。