MySQLはバージョン8.
MySQL 8.
validate-configオプション
validate-configオプションは、
まずは起動確認としてmysqldコマンドを実行してみます。
$ mysqld --defaults-file=/etc/mysql/my.cnf ...〈ログ省略〉 2021-03-15T20:11:22.628902+09:00 0 [System] [MY-010931] [Server] /usr/local/mysql8023/bin/mysqld: ready for connections. Version: '8.0.23' socket: '/etc/tmp/mysql.sock' port: 3306 MySQL Community Server - GPL.
特に問題なく起動できることが確認できました。このMySQLを一度落として、
$ mysqld --defaults-file=/etc/mysql/my.cnf --validate-config $ $ ps aux | grep mysqld | grep -v grep $
特になにもなく、
$ mysqld --defaults-file=/etc/mysql/my.cnf --validate-config --sonzaishinai-option 2021-03-15T20:25:36.903944+09:00 0 [ERROR] [MY-000068] [Server] unknown option '--sonzaishinai-option'. 2021-03-15T20:25:36.904064+09:00 0 [ERROR] [MY-010119] [Server] Aborting
エラーが返ってきました。もちろんMySQLは起動していません。
このように--validate-configオプションを追加して実行することで、
$ vi /etc/mysql/my.cnf $ mysqld --defaults-file=/etc/mysql/my.cnf --validate-config 2021-03-15T20:29:34.876933+09:00 0 [ERROR] [MY-000068] [Server] unknown option '--sonzaishinai-option'. 2021-03-15T20:29:34.877023+09:00 0 [ERROR] [MY-010119] [Server] Aborting
同様にエラーが出力されました。validate-configオプションを実行してエラーの有無で終了コードを確認してみると、
$ mysqld --defaults-file=/etc/mysql/my.cnf --validate-config echo $? 0 $ mysqld --defaults-file=/etc/mysql/my.cnf --validate-config --sonzaishinai-option 2021-03-15T20:34:38.485759+09:00 0 [ERROR] [MY-000068] [Server] unknown option '--sonzaishinai-option'. 2021-03-15T20:34:38.486024+09:00 0 [ERROR] [MY-010119] [Server] Aborting $ echo $? 1
WARNINGを表示
validate-configはlog-error-verbosity
と組み合わせて利用することで、
$ mysqld --defaults-file=/etc/mysql/my.cnf --validate-config --log-error-verbosity=2 --read_only=3 2021-03-15T20:50:57.688257+09:00 0 [Warning] [MY-000076] [Server] option 'read_only': boolean value '3' was not recognized. Set to OFF. $ echo $? 0
WARNINGを表示させることができました。なお、
loose接頭辞の扱い
第33回 MySQLのオプションファイル my.
$ mysqld --defaults-file=/etc/mysql/my.cnf --validate-config --log-error-verbosity=2 --loose 2021-03-15T21:06:00.522701+09:00 0 [Warning] [MY-000067] [Server] unknown variable 'loose-mecab-rc-file=/usr/lib64/mysql/mecab/etc/mecabrc'.
PLUGINのオプションの扱い
PLUGINで利用されるオプションについてはvalidate-configでは判定できません。たとえば、
$ mysqld --defaults-file=/etc/mysql/my.cnf --validate-config 2021-03-18T09:52:40.841398+09:00 0 [ERROR] [MY-000067] [Server] unknown variable 'rpl_semi_sync_master_enabled=1'. 2021-03-18T09:52:40.841480+09:00 0 [ERROR] [MY-010119] [Server] Aborting
PLUGINのオプションを利用する場合は、
mysqld-auto.cnfも判定対象?
先ほどのrpl_
をSET PERSISTで設定して、
mysql> SET PERSIST rpl_semi_sync_master_enabled=1; Query OK, 0 rows affected (0.00 sec) $ mysqld --defaults-file=/etc/mysql/my.cnf --validate-config $
今度はエラーとならずに返ってきました。プラグインの変数はvalidate-configでは認識しない点を考えると、
mysqld_safeにわたすとどうなるのか
起動時にmysqld_
validate-configはどういうときに使うと便利か
ここまで挙動を見ていきましたが、
また、
まとめ
今回は、
今回のvalidate-configについてはMySQL Server BlogのHow to validate server configuration settings.にも説明があるので、