前回インストールした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 を設定することで同様の事象が発生する模様。
- 【MySQL】「[ERROR] –initialize specified but the data directory has files in it.」が出力され、起動しない | 株式会社ヴァンデミックシステム
- MySQL5.7で"initialize specified but the data directory has files in it. Aborting." - Qiita
デフォルトよりパスワードの強度を弱めると発生する感じ。強めた場合はどうなるかは未確認。
とりあえず初回起動時は、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に何かファイルでも出力されるのかな?