macOS が一番お目にかかるんじゃないすかねー、 brew でインストールしていざ起動したらこれ。
よく言われている pid ファイルの不在と MySQL の data-dir 権限を対応しても動かない時は。
- 一度 mysql 系のプロセスを全部消すか、OS ごと再起動する
mysql --help | grep my.cnf
して、読み込まれるコンフィグを探す- コンフィグを退避するか消すかして、一番シンプルなものにする
- 起動しなおしてみる
- 駄目なら .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 をが利用するものに、と書くと「わがんにゃい!」となると思うので、
あたりでイケるはず。
/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 の標準出力のエラー内容がクソ雑魚なめくじなのはそうだと思う……。