環境
- MacOS Catalina 10.15.7
- MySQL 5.6.51
なぜか止まらないローカルのマイMySQL
MySQLを停止させるコマンドを入力してSUCCESS!するのに起動し続ける。まるでゾンビ(本来のゾンビプロセスとは違うけど笑)。
$ mysql.server stop
Shutting down MySQL
.. SUCCESS!
$ mysql.server status
SUCCESS! MySQL running (16081)
嬉しくないSUCCESS
何回stopしても生きている。強い。
$ sudo mysql.server stop
Password:
Shutting down MySQL
.. SUCCESS!
$ mysql.server status
SUCCESS! MySQL running (17194)
brewを使ってストップ
結論はこれでした。Homebrewでインストールしていたのでbrewでストップ。
$ brew services stop mysql@5.6
Stopping `mysql@5.6`... (might take a while)
==> Successfully stopped `mysql@5.6` (label: homebrew.mxcl.mysql@5.6)
下記の記事の引用によると・・
macには
brewでインストールしたmysqlが勝手に再起動するのを直すlaunchctl
という仕組みがあり,plist定義を作っておくと,自動でデーモンを起動してくれる.これにmysqlが定義されていた.
そういえばbrew installした際にbrew services start
したかもしれない、、DockerとかでMySQLを使う可能性があるときはこれやんないようにしようと思ったのでした。
勉強になった・・
おまけ・プロセスからの調べ方
背景としてDockerのMySQLを動かしたかったのに、ローカルのMySQLを参照していそう。競合しているのでは?という推定で調査したメモ。
ポート番号からプロセスを確認する
通常MySQLのポート番号は3306
なのでポート番号からプロセスを調べてみる
$ lsof -i:3306
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
com.docke 1560 user 46u IPv6 0x83e72043e4f42cff 0t0 TCP *:mysql (LISTEN)
mysqld 16081 user 16u IPv4 0x83e720440b4ccc0f 0t0 TCP localhost:mysql (LISTEN)
すると3306のポートでdockerのMySQLとローカルのmysqlが競合しているのがわかる。
pstreeコマンドでプロセスの関係を調べてみる
stopしているのにまた起動しているので親プロセスがMySQLを起動しているのでは?と仮説を立てる。
pstreeコマンドを使用するとプロセスの親子関係をツリー状で表示してくれる。
// pstreeが入ってなければインストール
$ brew install pstree
// ローカルMySQLのプロセスの親子関係を調べる
$ pstree 16081
--- 16081 pt1971 /usr/local/opt/mysql@5.6/bin/mysqld (省略)
$ pstree -s 16081
// 出力なし
親プロセスはなかったということになる。
ここでbrew services stop
にたどり着いたので終わったが、もし親プロセスがあったらその親プロセスと停止すれば良い(と思う。)
pstreeの使い方は下記の記事が分かりやすそう。
pstree – プロセスをツリー表示 – Linuxコマンド
おまけ・エラー
.. ERROR! The server quit without updating PID file
stopすると下記のようにエラーが出た。
$ mysql.server stop
Shutting down MySQL
.. ERROR! The server quit without updating PID file (/usr/local/var/mysql/ip-192-168-3-5.ap-northeast-1.compute.internal.pid).
この場合はプロセスを削除することで解決した。
// mysqldのプロセスを確認
$ ps -e | grep mysqld
13195 ?? 0:00.03 /bin/sh /usr/local/Cellar/mysql@5.6/5.6.51/bin/mysqld_safe (省略)
13292 ?? 0:00.51 /usr/local/Cellar/mysql@5.6/5.6.51/bin/mysqld (省略)
15036 ttys000 0:00.00 grep mysqld
// プロセス削除
$ kill 13195
$ kill 13292
$ mysql.server stop
Shutting down MySQL
.. SUCCESS!