从MySQL 8.0.16开始,MySQL Server支持一个–validate-config选项,该 选项使您无需在正常操作模式下运行服务器即可检查启动配置是否存在问题:
mysqld --validate-config
如果未找到错误,则服务器以退出代码0终止。如果发现错误,则服务器显示诊断消息,并以退出代码1终止。例如:
shell> 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:
shell> 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:
shell> 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中已删除。假设使用my.cnf文件中的系统变量运行了MySQL 5.7服务器,然后将其 升级到MySQL 8.0。运行升级的服务器 --validate-config以检查配置会产生以下结果:
shell> 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选项一起使用,以仅验证特定文件中的选项:
shell> 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本身是未知的。)