MAMPのエラーのはなし

MySQLのアップグレードをしようとしたときに起こったエラー

MAMPを起動させると、MySQLのアップグレードを促してきたので試したところ、エラーになってしまいました。

アップグレード前のMySQLのバージョンは5.7.30です。
(アップグレードしてなるはずだったバージョンは不明)

ひとまず閉じるとMAMPウィンドウの右上の電源アイコンがオレンジ色で「stop」と表示されました。
(「cloud」の雲アイコンが赤いのは前からだったはず)

f:id:yokoyoko_115:20211012004006p:plain
MAMPの画面

これがどういう状況なのか謎のまま、MySQLのアップグレードができそうな操作
[Tools > Upgrade MySQL databases...] を試しに押してみました。

すると再び同じエラーメッセージが出ました。

f:id:yokoyoko_115:20211012004635p:plain
エラー画面

エラーメッセージ

mysql_upgrade: Got error: 2002: Can't connect to local MySQL server through socket '/Applications/MAMP/tmp/mysql/mysql.sock' (61) while connecting to the MySQL server Upgrade process encountered error and will not continue.

mysql_upgrade: Got error: 2002: MySQLサーバーへの接続中に、ソケット「/Applications/MAMP/tmp/mysql/mysql.sock」を介してローカルのMySQLサーバーに接続できません(61)。 アップグレード処理でエラーが発生し、続行できません。

以下は、MAMPがうまく使えるようになるまでにあれこれしたことを挙げていきます。

MySQLサーバーが起動しているか確認

エラーメッセージから調べるとこちらの記事を見つけました。

[2002] MySQLのソケットエラー の原因と対処法 | 株式会社ビヨンド

まずはmysqldのプロセスがあるかどうか ps(process)コマンドを使って確認します。
プロセスがあればすなわちそのアプリケーション、mysqldが実行中か確認できるようです。

プロセスもちゃんと知っておいたほうが良さそうですね。

% ps aux | grep mysqld と入れると次のように返ってきました。

% ps aux | grep mysqld
username         3327   0.0  0.0  4259000    248 s000  U+   12:05PM   0:00.00 grep mysqld
username         3325   0.0  0.0        0      0   ??  Z    12:05PM   0:00.00 (mysqld)

これは起動していないっぽいです。ステータスの「Z」はゾンビ状態だそうです。

% sudo /etc/init.d/mysqld status

これでもMySQLサーバーの起動はできず。パスワードrootを入れてもできませんでした。3回パスワードを間違えて怖くなったのでやめました。
そもそも「init.d」ディレクトリが見つかりませんでした(この頃はいろいろと間違っている...ひどい過ち)。
※後ほど再チャレンジしました(後述)。

mysql.sockの確認

次に /Applications/MAMP/tmp/mysql/ を確認しました。

% ls /Applications/MAMP/tmp/mysql/
mysql.pid        mysql.sock     mysql.sock.lock

目視(Finder)では見つからなかったのにmysql.sockがあるようです。

MyQSLサーバーを起動させる

ソケット云々がなくてもMyQSLサーバーは起動させられるのだろうか、MyQSLサーバーが起動しないとそもそも接続の段階に移らないのではないか?
など考えてMyQSLサーバーを起動させる方法を調べてやってみました。

ためしたこと1:ログを削除してみる

MAMPでMySQL Serverが突然起動しなくなった時 → ログファイル削除 | シンプルシンプルデザイン

/Applications/MAMP/db/mysql57
ここにあるib_logfile0、ib_logfile1というファイルを削除してみます。怖いのでバックアップを取ります。

しかしMAMPを起動しても何も変わりませんでした。

ためしたこと2:my.confの作成

MacのMAMPのMySQLServerが起動しない時 - Qiita

/Applications/MAMP/conf
こちらに参考記事をもとにmy.cnfファイルを作りました。
こちらもMAMPを起動しても変わりませんでした;;
作成したmy.confは削除しました。

順番はMySQLの接続→起動??

今度はMySQLサーバーへの接続がうまくいっていないために起動しないのかなと思いました。
復習、MySQLとはデータベース管理システムの1つです。データベースを使うためのソフトウェアです。

MySQLサーバーの起動」とは、MySQLを起動させてサーバーにアクセスできるようにすること...?
起動はどのタイミングで行われるのか?

いろいろ考えても答えが出ないので引き続きあれこれしました。

MySQLにログインする

調べたら出てきました。
新しい行程「ログイン」。接続・起動よりは前っぽい印象です。

MAMPを使っていたらおそらくMAMP起動時にされていたのであろうMySQLのログインをコマンドラインから行ってみます。

調べたら % mysql -u root
でログインできます。とあるのですが「command not found: mysql」と返ってきました。

ターミナルでMySQLを使う準備〜Mac用 | IT工房|AI入門とWeb開発

そうでした。
mysqlを実行するパスが通っていないので、mysqlのあるところまで移動して実行する必要があります。

cd /Applications/MAMP/Library/bin/
% ./mysql -u root -p

すると最初に出てきたあのエラー!

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/Applications/MAMP/tmp/mysql/mysql.sock' (61)

ということは、MySQLにログインする時点でつまづいていた、ソケットに問題があるということなのでしょうか。

もう一度、ソケットファイルの確認。

MySQL mysql.socketがどこにあるか探したい。 - かもメモ

こちらに書かれている mysql_config コマンドでソケットファイルの場所が確認できるそうです。 /Applications/MAMP/Library/bin/ にはいろいろ実行ファイルがあって試してみたいです。

↑このディレクトリで
% ./mysql_config --socket
すると
/Applications/MAMP/tmp/mysql/mysql.sock

こう出ました。 やはりソケットファイルはあるみたいです。

ここまでのあれこれをまとめると、推測ですが、
my.cnfを作る

mysql.sockが生成される

mysql.sockがちゃんと使われているとMySQLが起動する

ということなのではないでしょうか。

試しに、再チャレンジとして、今度はパスに気をつけてMyQSLサーバー起動のコマンド % ./mysqld start
を打ってみました。

エラーの嵐!

最終的に
[Note] ./mysqld: Shutdown complete
とシャットダウンしていました。恐ろしい。
(サーバーの状態を確認する % ./mysqld status でも同じでした)

やはりソケットファイルの問題のようです。

mysql.sockが目視できないのが引っかかる

やっぱり実は実態がないのではないか(アップグレード処理の拍子にmysql.sockが作られたと勘違いされている)と思い、コマンドラインから空のmysql.sockファイルを作ってみます。

% touch mysql.sock

しかし何も変わらず。見えません。

ところでmysql.sock.lockとは?

どうしてここまで気に留めなかったのか。mysql.sock.lockを調べてみます。

MySQL5.7が起動できない。 - Qiita

この記事を読んでmysql.sock.lockファイルを削除してみよう、

とすると、VS Codeで開いてみたタイミングだったのか、mysql.sock.lockが消えていました!あとmysql.pidファイルもです。

ここでMAMPを起動してみました。

すると、オレンジの「stop」ボタンがグレーの「start」ボタンになっていました。 めでたくMAMPWordPressのサイトを見ることができました。

後で確認すると、MAMPが起動していないときはmysql.sock.lockファイルもなく、MAMP起動後にmysql.sock.lockが作られているようです。

またまた勝手な推測ですが、おそらくmysql.sock.lockでアップグレードのうまくいかないmysql.sockの設定がロックされてしまい、接続できなかったのではないでしょうか。

根本的な解決は、

MySQLのコンフィグファイルとクライアントソフトのコンフィグファイルのソケットを同じパスに設定する

なのだと思います。
多分。仕組みが謎です。

せめてコマンドラインからmysql.sockを開いてみればよかったー(遅い)

クライアントソフトはMAMPのことなのか、それぞれのファイルがどこにあるのか、ごちゃごちゃしてきました。

結局解決方法は何だったのか

ちゃんと道筋を立てたMAMPMySQLサーバー起動の流れは分からずじまいでした。

ここまで調べて偶然元に戻った印象です。

また、MyQSLサーバーの起動きっかけだったのか、MAMP画面の「start」ボタンを押して少しすると、半ば強制的にPCが再起動しました。 お、恐ろしい。

結局MyQSLのアップグレードも叶わず。作業の途中だったので変な操作しないようにしています。
このままアップグレードできなかったらのちのち困るはずです。

どうしたものか。

後に同じ問題になった時に、少しでも以前の出来事が問題改善、知識のアップデートにつながるといいです。

ひとまず様子見ます。おしまい。