MySQLの初期化前にvalidate_password関連設定を変更するとエラーが発生する

前回インストールしたMySQL5.7を起動しようとすると [ERROR] --initialize specified but the data directory has files in it. Aborting. が発生。

エラーメッセージの通り、データディレクトリに何かファイルがあるのかと思ったが、調べてみると原因が違ったのでメモ。

環境

CentOS 7にyumでインストールしたMySQL 5.7.29。

状況

インストールしたMySQLのmy.cnfを他プロジェクトのものをベースに変更し、 systemctl start mysqld で起動したところ、 [ERROR] --initialize specified but the data directory has files in it. Aborting. が発生。

調査

エラーメッセージで検索すると、datadir配下にファイル/ディレクトリが存在すると発生するとのこと。

とりあえずdatadirを空にして再度startしたが変わらず。 mysqld --initialize-insecure しても同様のエラー。

これらとは原因が違うかと思い、datadirを空にした後、my.cnfをインストール直後のデフォルトに戻してstartすると初期化および起動に成功。

my.cnfの差分を少しずつ反映させ、datadirを空にしてstartを繰り返すと、 validate_password_policy=LOW を設定したタイミングでエラーが発生。ベースにした他プロジェクトが古く、使われていたパスワード強度が低かったためこの設定が入っていた。

エラーメッセージと「validate_password」で検索すると、 validate_password=OFF を設定することで同様の事象が発生する模様。

デフォルトよりパスワードの強度を弱めると発生する感じ。強めた場合はどうなるかは未確認。

とりあえず初回起動時は、validate_passwordプラグイン関連のパラメーターは変更しないほうがよさそう。

対応

my.cnfの validate_password_policy=LOWコメントアウトsystemctl start mysqld で初期化および起動。

起動に成功したら validate_password_policy=LOW を有効化し、 systemctl restart mysqld で再起動したところ問題なく起動した。

また、最終的にはパスワードポリシーは厳しくて問題ないということで、該当行を削除し、validate_password_policyはデフォルトのMEDIUMで運用することとした。

振り返り

エラーメッセージと原因がだいぶ違っており、対応に時間がかかった。

とりあえずの対処方法が分かったので詳細は確認していないが、validate_passwordまわりの設定を変更した状態で初期化すると、datadirに何かファイルでも出力されるのかな?