MySQLへのログインでエラーになった時の対処法

MySQLへのログインでエラーになった時の対処法
この記事はこんな悩みを解決します
  • MySQLにログインできない
  • PIDファイルって何?
  • ERROR 2002 (HY000)にどう対処したらいいの?

MySQLにログインしようとしたらエラーになることがあります。再インストールしたら解決できますが、もちろんデータが消えてしまいます。データを消したくないという方はこの記事を参考にしてもらったらと思います。

この記事を読むことでMySQLにログインするときの対処法が分かります。

https://www.naka-style-blog.com/%e3%82%88%e3%81%8f%e4%bd%bf%e3%81%86unix%e3%82%b3%e3%83%9e%e3%83%b3%e3%83%89%e3%80%82%e5%88%9d%e5%bf%83%e8%80%85%e3%81%af%e8%a6%9a%e3%81%88%e3%81%a6%e3%81%8a%e3%81%8d%e3%81%9f%e3%81%84%e3%80%82/

MySQLへのログインでエラーになった時の対処法

Terminalから下記のコマンドでMySQLにログインします。

mysql -u root -p

パスワード入れると下記のエラーが出ました。

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

調べてみるとMySQLを立ち上げてないことが原因だと分かりました。

mysql.server restart

これで解決!と思いきやまたもやエラー

ERROR! MySQL server PID file could not be found!
Starting MySQL
... ERROR! The server quit without updating PID file (/usr/local/var/mysql/mbp.local.pid).

mbp.local.pid なしにはサーバーを立ち上げられないとメッセージが出ているのでPIDファイルを作ります。

cd /usr/local/var/mysql
touch mbp.local.pid
PIDファイルとは?

Linux(Terminal)でのプロセスを保存するテキストファイルです。そのため、このファイルがないとLinuxのサービスがうまく動かなくなります。

ls -l mbp.local.pid でファイルが作られたか確認できます。

これでいけるかと思いきやMySQLを立ち上げようとするとエラーが出ます。

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

/tmp/mysql.sock がないよ、と出たので作ってやります。

touch /tmp/mysql.sock
mysql.sockとは

UNIXドメインソケットのことです。PC内でのプログラムとMySQLの通信(unixソケット)を処理してくれるファイルです。このファイルがないとプログラムをMySQLに伝えることができません。

再びMySQLを立ち上げようとしましたが次はパーミッションのエラー。

ERROR! MySQL server PID file could not be found!
Starting MySQL
.rm: /tmp/mysql.sock: Permission denied
.. ERROR! The server quit without updating PID file (/usr/local/var/mysql/mbp.local.pid).

なぜかPIDファイルもないよ、と言われたので再び作りました。(この原因はわかりません。)

話を戻してパーミションがどうなっているか確認します。

mbp:mysql user$ ls -l /tmp/mysql.sock
srwxrwxrwx  1 root  wheel  0  6 27 12:04 /tmp/mysql.sock

以下のコマンドでパーミッションを変更します。

sudo chown user:admin /tmp/mysql.sock

パーミションについて基本を押さえておきたい、という方は下記の記事を参考にしてください。

https://www.naka-style-blog.com/%e3%83%91%e3%83%bc%e3%83%9f%e3%83%83%e3%82%b7%e3%83%a7%e3%83%b3%e3%81%ae%e5%a4%89%e6%9b%b4%e6%96%b9%e6%b3%95%e3%81%a8%e3%83%91%e3%82%b9%e3%81%ae%e9%80%9a%e3%81%97%e6%96%b9%e3%80%82%e8%a6%9a%e3%81%88/

これで再びMySQLを起動してみます。

mbp:mysql user$  mysql.server restart
 ERROR! MySQL server PID file could not be found!
Starting MySQL
.. SUCCESS! 

うまくいきました。PIDファイルがない、と出ていますがSUCCESSと出ているので問題ないでしょう。

これでMySQLにログインします。

mbp:mysql user$ mysql -u root -p
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 8
Server version: 8.0.19 Homebrew

うまくいきました。

まとめ

PIDファイルや/tmp/mysql.sock がなくなっているのが問題でした。

何かの拍子にこの2つがなくなるようです。どちらもプログラムを動かす時には必須のファイルになります。

多くのサイトではMySQLを再インストールすることで解決していましたが、データが消えてしまうので今回のやり方を試してもらったらと思います。

関連記事