### 5.1.3服务器配置验证

从MySQL 8.0.16开始，MySQL服务器支持[`--验证配置`](server-options.html#option_mysqld_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
```

一旦发现任何错误，服务器就会终止。要进行其他检查，请更正初始问题，并使用[`--验证配置`](server-options.html#option_mysqld_validate-config)再一次

对于前面的示例，其中[`--验证配置`](server-options.html#option_mysqld_validate-config)结果显示错误消息，服务器退出代码为1。还可能显示警告和信息消息，具体取决于[`日志错误详细`](server-system-variables.html#sysvar_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
```

调查的范围[`--验证配置`](server-options.html#option_mysqld_validate-config)选项仅限于服务器可以在不经历正常启动过程的情况下执行的配置检查。因此，配置检查不会初始化存储引擎和其他插件、组件等，也不会验证与这些未初始化的子系统相关的选项。

[`--验证配置`](server-options.html#option_mysqld_validate-config)可以随时使用，但在升级后特别有用，用于检查升级后的服务器是否认为以前与旧服务器一起使用的任何选项已弃用或过时。例如`tx_只读`系统变量在MySQL 5.7中被弃用，在8.0中被删除。假设一台MySQL 5.7服务器在其`我的cnf`文件，然后升级到MySQL 8.0。使用运行升级的服务器[`--验证配置`](server-options.html#option_mysqld_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
```

[`--验证配置`](server-options.html#option_mysqld_validate-config)可以与[`--默认文件`](option-file-options.html#option_general_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
```

记住这一点[`--默认文件`](option-file-options.html#option_general_defaults-file)，如果指定，则必须是命令行上的第一个选项。（使用反转的选项顺序执行前面的示例会生成一条消息[`--默认文件`](option-file-options.html#option_general_defaults-file)它本身是未知的。）
