FreeBSD13.2/MySQL 8.0 : WARNING: failed precmd routine for mysql

FreeBSD13.2(ARM64) に MySQL 8.0 をインストールし、設定を行うために mysqlサーバーを起動しようとしたら、「WARNING: failed precmd routine for mysql」で起動しない!

MySQL5.x の時はこれでよかったのに、8.0 では、なぜ?

今回、MySQL 8.0 をインストールしたのは、テストのため。毎朝届くセキュリティレポートに、

Checking for packages with security vulnerabilities:
Database fetched: 2023-10-15T03:24+09:00
mysql57-client-5.7.42: Tag: expiration_date Value: 2023-12-31
mysql57-server-5.7.42: Tag: expiration_date Value: 2023-12-31

と、MySQL 5.7 のサポートがすでに終了していて、年末に ports コレクションから削除されるとの記述が届いているため。
いきなり 5.7→8.0に上げてトラブルが起きると嫌なので、テストしようと  FreeBSD 13.2 のテストマシンに pkg コマンドから MySQL 8.0 をインストールしました。

mysql80-client-8.0.33_3 Multithreaded SQL database (client)
mysql80-server-8.0.33   Multithreaded SQL database (server)

インストール後に、「service mysql-server onestart」と発行した結果が、上記のワーニングメッセージ。

root:/usr/local/etc/rc.d # service mysql-server onestart
/usr/local/etc/rc.d/mysql-server: WARNING: failed precmd routine for mysql

ワーニングだけど、mysql サーバーも起動しない。何か手順間違った?と、過去ログを見てみるものの、手順は合ってるみたい。

では、OS側の問題?
切り分けるため、一旦、MySQL 8.0 を削除し、MySQL 5.7 をインストールして、同様の手順を発行。

root:/var/db # service mysql-server onestart
Starting mysql.
root:/var/db # ps ax|grep mysql
12944  -  Ss       0:00.30 /bin/sh /usr/local/bin/mysqld_safe --defaults-extra-file=/usr/local/etc/mysql/my.cnf --basedir=/usr/local --datadir=/var/
14223  -  S        0:02.13 /usr/local/libexec/mysqld --defaults-extra-file=/usr/local/etc/mysql/my.cnf --basedir=/usr/local --datadir=/var/db/mysql
14228  2  S+       0:00.01 grep mysql

5.7 ではインストール、即起動で問題なし。/var/db/mysql ディレクトリーも初期化された。

ここで、一旦、MySQL5.7を抜いて、もう一度MySQL8.0を入れ、/var/db/mysql は初期化せずに、MySQL8.0サーバーを起動してみたところ、今度はワーニングメッセージ無しで、”Starting mysql.” と、起動成功っぽいメッセージが出てくるもののMySQLは起動せず。
ログファイルが生成されていたので中身を見てみると、

2023-10-17T06:15:59Z UTC - mysqld got signal 4 ;
Most likely, you have hit a bug, but this error can also be caused by malfunctioning hardware.
Thread pointer: 0xb261d000
Attempting backtrace. You can use the following information to find out
where mysqld died. If you see no messages after this, something went
terribly wrong...
Fatal signal 11 while backtracing

致命傷で、落ちてるじゃん。

ここで、アーキテクチャが違う amd64 の FreeBSD13.2 に MySQL 8.0 をインストールしてみたらどうなる?と思いつき、試してみたところ、Intel CPUの FreeBSD 13.2, MySQL 8.0 では問題なく動作する。(バージョンは、不具合が出る Arm64 と同じ)

service mysql-server onestart で MySQL を起動しようとしているのを、シェルからデバッグ情報を表示させながら実行してみると、

sh -x /usr/local/etc/rc.d/mysql-server start
+ eval /usr/local/libexec/mysqld '--defaults-extra-file=/usr/local/etc/mysql/my.cnf' --initialize-insecure '--basedir=/usr/local' '--datadir=/var/db/mysql' '--user=mysql'
+ return 1

ここでエラーになってる。ここは/var/db/mysql データベースディレクトリを初期化するコマンドで、途中まで実行して auto.cnf を消そうとしてエラーになってる?

エラーメッセージに含まれる「Most likely, you have hit a bug, but this error can also be caused by malfunctioning hardware.」の部分に該当している模様。バグに当たったか、ハードウェア不良だそうな。

いやいや、MySQL 5.7が終了間際で、次期バージョン MySQL 8.0 が起動しないって、これ、困るんですけど。

これ、Raspberry Pi 向け FreeBSD 13.2 固有の問題?それともハードウェア故障?
たまたま、昨日、Raspberry Pi2 V1.1 に FreeBSD13.2をインストールしたものがあるので、こちらにも MySQL 8.0 をバイナリーインストールしてみました。

mysql80-client-8.0.32_3        Multithreaded SQL database (client)
mysql80-server-8.0.32_3        Multithreaded SQL database (server)

こっちは問題なく起動。

MySQL 8.0_33_3 に何か問題があるのか、私のRaspberry Piハードウェアに問題があるのか?

現時点の回避策は、別のハードウェアを使うか、 MySQL ver 8.0_32 を使うことのようです。どうしたものか。

追記:

その後も、MySQLを起動できていたサーバーで、MySQLを入れたり消したり、バージョンアップしたり、ダウンさせたりしていたら、MySQL5.7 が動いていたこちらのサーバーも、MySQL起動時に、

/usr/local/etc/rc.d/mysql-server: WARNING: failed precmd routine for mysql

が出てきて、mysql server が立ち上がらなくなってしまいました。MySQL は異なるバージョンを同時にインストールできないので、入れたり消したりするしかないわけです。
やばっ。と思ったものの、/var/db/mysql フォルダーも書いたり消したりしていたら、

-rw-r----- 1 mysql mysql 0 Oct 18 00:56 mysql-bin.index

ファイルが消えずに残っていたことが判明。この mysql-bin.index を消したら起動するようになりました。

焦った~。

と安心して、またバージョンアップダウンを繰り返していたら、「WARNING: failed precmd routine for mysql」発生。今度は、/var/db/mysql ディレクトリ以下を消去しても復帰しない。ちなみに、mysql80-server に切り替えた途端です。

検索すると、次のページに情報を見つけました。

sudo pkg delete mysql57-server
sudo rm -rf /usr/local/etc/mysql
sudo rm -rf /var/db/mysql
sudo pkg install mysql57-server
sudo service mysql-server start

ディレクトリ名(バージョン)が多少異なりますが、/var/db/mysql の他、/usr/local/etc/mysql も消して再インストールせよとのこと。

やってみたら、サーバーが起動するようになりました。

コメントを残す