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 9.0。使用 --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
本身是未知的。)