MySQL 支援 --validate-config
選項,可啟用啟動組態檢查,找出問題,而無需在正常操作模式下執行伺服器。
mysqld --validate-config
如果未發現錯誤,伺服器會以結束代碼 0 終止。如果發現錯誤,伺服器會顯示診斷訊息,並以結束代碼 1 終止。例如:
$> mysqld --validate-config --no-such-option
2018-11-05T17:50:12.738919Z 0 [ERROR] [MY-000068] [Server] unknown
option '--no-such-option'.
2018-11-05T17:50:12.738962Z 0 [ERROR] [MY-010119] [Server] Aborting
伺服器會在發現任何錯誤後立即終止。若要進行其他檢查,請修正初始問題,然後再次使用 --validate-config
執行伺服器。
對於上述範例,其中使用 --validate-config
會導致顯示錯誤訊息,伺服器結束代碼為 1。也可能會顯示警告和資訊訊息,具體取決於 log_error_verbosity
值,但不會立即終止驗證或產生結束代碼 1。例如,此命令會產生多個警告,且都會顯示。但不會發生錯誤,因此結束代碼為 0。
$> mysqld --validate-config --log_error_verbosity=2
--read-only=s --transaction_read_only=s
2018-11-05T15:43:18.445863Z 0 [Warning] [MY-000076] [Server] option
'read_only': boolean value 's' was not recognized. Set to OFF.
2018-11-05T15:43:18.445882Z 0 [Warning] [MY-000076] [Server] option
'transaction-read-only': boolean value 's' was not recognized. Set to OFF.
此命令會產生相同的警告,但也會產生錯誤,因此會顯示錯誤訊息以及警告,且結束代碼為 1。
$> mysqld --validate-config --log_error_verbosity=2
--no-such-option --read-only=s --transaction_read_only=s
2018-11-05T15:43:53.152886Z 0 [Warning] [MY-000076] [Server] option
'read_only': boolean value 's' was not recognized. Set to OFF.
2018-11-05T15:43:53.152913Z 0 [Warning] [MY-000076] [Server] option
'transaction-read-only': boolean value 's' was not recognized. Set to OFF.
2018-11-05T15:43:53.164889Z 0 [ERROR] [MY-000068] [Server] unknown
option '--no-such-option'.
2018-11-05T15:43:53.165053Z 0 [ERROR] [MY-010119] [Server] Aborting
--validate-config
選項的範圍僅限於伺服器可以在不經過正常啟動程序的情況下執行的組態檢查。因此,組態檢查不會初始化儲存引擎和其他外掛程式、元件等等,也不會驗證與這些未初始化子系統相關聯的選項。
--validate-config
可以隨時使用,但在升級後尤其有用,可以檢查先前與舊伺服器一起使用的任何選項是否被升級後的伺服器視為已棄用或過時。例如,tx_read_only
系統變數在 8.0 中已移除。假設 MySQL 5.7 伺服器在其 my.cnf
檔案中使用該系統變數執行,然後升級至 MySQL 8.4。使用 --validate-config
執行升級後的伺服器以檢查組態會產生此結果:
$> mysqld --validate-config
2018-11-05T10:40:02.712141Z 0 [ERROR] [MY-000067] [Server] unknown variable
'tx_read_only=ON'.
2018-11-05T10:40:02.712178Z 0 [ERROR] [MY-010119] [Server] Aborting
--validate-config
可以與 --defaults-file
選項搭配使用,僅驗證特定檔案中的選項。
$> mysqld --defaults-file=./my.cnf-test --validate-config
2018-11-05T10:40:02.712141Z 0 [ERROR] [MY-000067] [Server] unknown variable
'tx_read_only=ON'.
2018-11-05T10:40:02.712178Z 0 [ERROR] [MY-010119] [Server] Aborting
請記住,如果指定 --defaults-file
,則它必須是命令列上的第一個選項。(以相反的選項順序執行上述範例會產生訊息,指出 --defaults-file
本身是未知的。)