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
系统变量在MySQL 5.7中弃用,在8.0中删除。假设一个MySQL 5.7服务器使用该系统变量在其my.cnf
文件中,然后升级到MySQL 8.3。使用--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
本身是未知的。)