概要
- ほぼ1日mysqlで頭を抱えて溶けそうになったので、解決方法を残しておきます。
前提・環境
-
Mac
- 機種ID:MacBookPro18,3
- macOS:Monterey
- チップ: Apple M1 Pro
- メモリ: 16GB
-
brewでmysqlをインストールしています
-
元々、brewでmysql@5.7とmysqlを入れていましたが、mysql@5.7をuninstallしたところから本記事になりますので、最新バージョンは以下バージョンのもので試行錯誤していました
mysql Ver 8.0.31 for macos12.6 on arm64 (Homebrew)
- 5.7でPATH通す云々で一悶着ありましたが、bash_profileは本記事と関係ないのでカットしています
-
多くの記事で記載のあった以下項目は既に実施済みですが、何も変わりませんでした
- 再起動しよう
- 不要なプロセスをkillコマンドで消しましょう
- brewでmysqlをアンインストール・インストールする(再インストール)
参考記事・助けてもらった先人の知恵
- MySQLが起動しない(Can't connect to local MySQL server ~~)
- mysqlが起動できない
- 【MySQL】pid not foundもしくはpermission deniedの対応方法
- MySQL起動エラーの対処の仕方【Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)】
- MySQL start しない PID ファイルがないエラーを socket ファイルが入っている /tmp の所有者とグループを _mysql に変えることで解決した
- mysql 起動時のThe server quit without updating PID file エラーの回避法
エラー対応手順
-
なぜか、mysqlコマンドを打つと弾かれるようになってしまった。
-
$ mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- MySQLでは、サーバーとクライアントを接続するときに、ソケットを使っているらしいが、どうやらこのsocketファイルがうまく使えていないらしい。なぜ消えてしまったいるのかは不明。
- socketファイルを作れば良いという記事が多かったので、
touch /tmp/mysql.sock
を実行してからmysql -u root
実行すると、
- socketファイルを作れば良いという記事が多かったので、
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)
-
2が38になりやがった...なんなんだ!
- socketファイルがいるディレクトリ/tmpに権限を与えるという、先人の知恵を借りて以下コマンドも実施
-
chmod 777 /tmp/mysql.sock
で所有権を与え、 -
mysql.server restart
でリスタートしてみる
-
さあ、来い!! しかしーー
ERROR! MySQL server PID file could not be found!
-
なんやねん!そんな怒らんでも。
-
先ほどのエラーメッセージは、「プロセスのIDが記録されているPIDファイルがない」というエラー。つまり、PIDを作ればいける!という記事を見つけたので、以下を実施。
-
cd /opt/homebrew/var/mysql
にいって、(一応mysqlディレクトリが生きているか確認するために移動) -
sudo touch ********.local.pid
を実施!
-
-
pid ファイルとは、サービス起動時に作成されるらしいので、
mysql.server start
を再度実施すればいけるか...!!
ERROR! The server quit without updating PID file (/opt/homebrew/var/mysql/********.local.pid).
-
やっぱりダメです...とほほ(^^;)
- ********はマシン名が入っています
-
さて。/opt/homebrew/var/mysql以下のファイルの所有者をすべて_mysqlにすることで解決したという記事を見つけた。
-
sudo chown -R _mysql:_mysql /opt/homebrew/var/mysql
からのmysql.server restart
でどうや!
-
ERROR! MySQL server PID file could not be found!
-
まじか、手強すぎw
-
ふむぅ。
sudo chmod 777 /opt/homebrew/var/mysql
を行ってから、mysql.server start
を実施してみるが、
ERROR! The server quit without updating PID file (/opt/homebrew/var/mysql/********.local.pid).
-
やっぱり君だよね(
-
再びしばらくぐぐっていると、
brew uninstall mysql
では消えないものがあるらしい。local配下のmysqlを全て削除してからもう一度再インストールしてみることに。- コマンドは上記記事を参考にしました
$ sudo rm -rf /usr/local/mysql
$ sudo rm -rf /Library/StartupItems/MYSQL
$ sudo rm -rf /Library/PreferencePanes/MySQL.prefPane
$ sudo rm -rf /Library/Receipts/mysql-.pkg
$ sudo rm -rf /usr/local/Cellar/mysql*
$ sudo rm -rf /usr/local/bin/mysql*
$ sudo rm -rf /usr/local/var/mysql*
$ sudo rm -rf /usr/local/etc/my.cnf
$ sudo rm -rf /usr/local/share/mysql*
$ sudo rm -rf /usr/local/opt/mysql*
- そして再インストールを実施
brew uninstall mysql
brew install mysql
- すると、インストールメッセージの中に気になるERRORメッセージを発見!!
2022-12-28T06:52:37.954850Z 0 [System] [MY-013169] [Server] /opt/homebrew/Cellar/mysql/8.0.31/bin/mysqld (mysqld 8.0.31) initializing of server in progress as process 42594
2022-12-28T06:52:37.956662Z 0 [ERROR] [MY-010457] [Server] --initialize specified but the data directory has files in it. Aborting.
2022-12-28T06:52:37.956679Z 0 [ERROR] [MY-013236] [Server] The designated data directory /opt/homebrew/var/mysql/ is unusable. You can remove all files that the server added to it.
2022-12-28T06:52:37.956714Z 0 [ERROR] [MY-010119] [Server] Aborting
2022-12-28T06:52:37.957673Z 0 [System] [MY-010910] [Server] /opt/homebrew/Cellar/mysql/8.0.31/bin/mysqld: Shutdown complete (mysqld 8.0.31) Homebrew.
- ↓ここです!
/opt/homebrew/var/mysql/ is unusable. You can remove all files that the server added to it.
- ここに注目して、
/opt/homebrew/var/
にあるmysqlディレクトリを丸ごと削除。 -
mysql -u root
を実行してもこの状態。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
- mysqlディレクトリ消したから、これはもう一度再インストやな? 早速実施!!
brew uninstall mysql
brew install mysql
-
すると、先ほどの[ERROR]が消えました!おおっー!?
-
mysql -u root
を実行すると、、
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.31 Homebrew
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
キタァーー!!!!!!!!
-
mysql.server start
と打つと、、、
Starting MySQL
SUCCESS!
キタァーー!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
久しぶりに見た、この
「「「SUCCESS!」」」
一緒に叫んでやろうかと思いました。
以上、mysqlとの長い戦いでした!!!
補足
①brew services start mysqlとmysql.server startについて
- brew services start mysql : Macの再起動後に自動的にSQLが再起動される
- mysql.server start : Macの再起動後に自動的にSQLが再起動されない
②MySQL 8.0とMySQL 5.7について
- 8.0になってパフォーマンスが2倍高速になったらしい
- ほか、こちらの記事に詳細があります
- 公式:2.11.4 MySQL 8.0 での変更