有没有办法在应用更改之前测试对 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/