7.1.3 服务器配置验证
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
本身是未知的)。