AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

ERROR! The server quit without updating PID file

macOS が一番お目にかかるんじゃないすかねー、 brew でインストールしていざ起動したらこれ。

よく言われている pid ファイルの不在と MySQL の data-dir 権限を対応しても動かない時は。

  1. 一度 mysql 系のプロセスを全部消すか、OS ごと再起動する
  2. mysql --help | grep my.cnf して、読み込まれるコンフィグを探す
  3. コンフィグを退避するか消すかして、一番シンプルなものにする
  4. 起動しなおしてみる
  5. 駄目なら .err を読む (これが 1. でもいい)

一度 mysql 系のプロセスを全部消すか、OS ごと再起動する

変な起動の仕方をしたとか、プロセスが kill されきれずに残っている、みたいなパターンは往々にしてあるので、一度全部綺麗にします。

❯ ps aux|grep -v grep|grep mysql

などして、プロセスが検出されなくなればオッケー。

mysql --help | grep my.cnf して、読み込まれるコンフィグを探す

Windows であれば mysql --help | grep my.ini でしょうか。 僕の環境だと以下になりました。

❯ mysql --help | grep my.cnf
                      order of preference, my.cnf, $MYSQL_TCP_PORT,
/etc/my.cnf /etc/mysql/my.cnf /opt/homebrew/etc/my.cnf ~/.my.cnf

コンフィグを退避するか消すかして、一番シンプルなものにする

「インストールした直後は動いていたのに!」に一番きくやつ。

sudo rm -f /etc/my.cnf
sudo rm -f /etc/mysql/my.cnf
sudo rm -f /opt/homebrew/etc/my.cnf
sudo rm -f ~/.my.cnf

最初に読み込むのは /etc/my.cnf っぽいので、とりあえずここにシンプルなコンフィグを作成します。

vi /etc/my.cnf

ファイルオーナーは mysqld をが利用するものに、と書くと「わがんにゃい!」となると思うので、

  • macOS なら chown 今ログインしているユーザ名:admin
    • ダメだったら chown _mysql:_mysql
  • Linux だったら chown mysql:mysql

あたりでイケるはず。

/etc/my.cnf
[mysqld]
bind-address = 127.0.0.1

起動しなおしてみる

ここまでやったら mysql.server start なり systemctl start mysqld なり、自分の環境で起動するコマンドを叩いてみてください。

駄目なら .err を読む (これが 1. でもいい)

だめでしたか? じゃあ data-dir に存在する.err ファイルを見ましょう。

例えば掲題のエラーであれば、以下のように表示されます。

❯ mysql.server start
Starting MySQL
... ERROR! The server quit without updating PID file (/opt/homebrew/var/mysql/donbulinuxnonotopasokon.local.pid).

/opt/homebrew/var/mysql/ hombrew でインストールした場合の data-dir です。 ここに、/opt/homebrew/var/mysql/ホスト名.err として情報が出力されています。 ホスト名は hostname コマンドで出るものです。

僕の環境の場合は /opt/homebrew/var/mysql/donbulinuxnonotopasokon.local.pid でした。

less /opt/homebrew/var/mysql/donbulinuxnonotopasokon.local.err

...
2022-12-09T14:08:58.223220Z 0 [ERROR] [MY-000067] [Server] unknown variable 'validate_password.length=4'.
2022-12-09T14:08:58.653270Z 0 [ERROR] [MY-010361] [Server] Fatal error: Illegal or unknown default time zone 'Asia/Toky>
2022-12-09T14:08:58.654206Z 0 [ERROR] [MY-010119] [Server] Aborting

はい、 ERROR が出てますね。 この時はインストールした直後に、別の環境から動いてる my.cnf を持ってきて移植していたのでした。

「だってこのコンフィグで同じバージョンで、隣の MBP でうごいてたもん!」「今は!動いて!!ないやろがい!!1!!!11!!!!(平手打ち」

まとめ

オーナーと権限が合ってればだいたいこんなもんです。 .err が出力されていれば、それを読むのが一番はやいでしょう。

MySQL の標準出力のエラー内容がクソ雑魚なめくじなのはそうだと思う……。