mysqld 检查配置文件语法而不应用

mysqld 检查配置文件语法而不应用

有没有办法在应用更改之前测试对 mysqld 配置文件的更改?我正在考虑一些等效于httpd -t但对于 的东西mysqld

此链接https://www.percona.com/blog/2011/02/17/how-to-syntax-check-your-my-cnf-file/建议:

mysqld --help
error: Found option without preceding group in config file: /etc/my.cnf.d/mariadb-server.cnf at line: 6
...

这确实有效,但是返回代码不变且始终为 0,因此不适合在脚本中使用。

答案1

将 stderr 输出重定向mysql --help到 stdout 然后您就可以 grep 它了。

mysqld --help 2>&1 | grep -ci error

这将导致0没有错误,并且如果有错误则会产生错误数量。

如果您想依赖返回代码,则可以使用grep -qi。然而,这有点违反直觉,因为 grep0在找到字符串时会返回,而当它找不到字符串时error也会返回。1

答案2

你可以传递自己的代码,但是还有一个选项希望你有兴趣探索

mysqld --validate-config

如果未发现任何错误,服务器将以退出代码 0 终止。如果发现错误,服务器将显示诊断消息并以退出代码 1 终止。

shell> mysqld --validate-config --no-such-option
2030-03-31T11:50:12.738919Z 0 [ERROR] [MY-000068] [Server] unknown option '--no-such-option'.
2030-03-31T11:50:12.738962Z 0 [ERROR] [MY-010119] [Server] Aborting

再举一个例子

shell> mysqld --validate-config
2030-03-31T12:40:02.712141Z 0 [ERROR] [MY-000067] [Server] unknown variable 'tx_read_only=ON'.
2030-03-31T12:40:02.712178Z 0 [ERROR] [MY-010119] [Server] Aborting

如果您想在应用之前测试位于不同路径上的 my.cnf,请按如下方式使用。

shell> mysqld --defaults-file=./my.cnf-test --validate-config

答案3

mysql conf 验证在官方博客和文档中得到了很好的解释,我已经为 8.0 和 5.7 分享了它

https://dev.mysql.com/doc/refman/8.0/en/server-configuration-validation.html https://dev.mysql.com/blog-archive/how-to-validate-server-configuration-settings/

相关内容