MacのターミナルからMySQLへログイン出来ないとき

Mac OSへHomebrewを使用してインストールしたMySQLへターミナルから接続を試みた際、ログイン出来ない事がありましたので、解決方法と行った手段をメモします。

環境 : Mac OS High Sierra 10.13.12、MySQL Ver 8.0.16 for osx10.13 on x86_64 (Homebrew)

ターミナルからインストール済みのMySQLログイン出来ない。。

rootユーザでMySQLへログイン

以下のコマンドでMySQLに用意されている一番大きな権限をもつrootユーザでログインを試みる
mysql -u root
ログイン出来ない原因1. ソケットファイルが存在しない

ログイン出来ない原因1. MySQLが起動出来ていない

表示されたエラー
ERROR 2002 (HY000): Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)

/tmp/mysql.sockというソケットファイルと呼ばれるログインに必要なファイルが存在しないようなので作成する。
sudo touch /tmp/mysql.sock

(追記)上記、打ち消し線の内容ですが、ソケットファイルはMySQL起動に成功すると自動的に作成されるようです。

MySQLを再起動
sudo mysql.server start

起動前

KENnoMacBook-ea:~ ken$ ls /tmp
0E1F6442-1C63-4CF3-90B2-A564219CFC84		ExmanProcessMutex
1D517B88-8385-4DFE-8F67-D30FB5232792		adobegc.log
7A026307-61DF-46C8-94EB-4BA7FFAD9004		com.adobe.AdobeIPCBroker.ctrl-ken
963B1E72-3D17-42FF-8821-65B1C412C712_IN		com.apple.launchd.3gC3HsE1gp
963B1E72-3D17-42FF-8821-65B1C412C712_OUT	com.apple.launchd.xP0QeugEek
ABF356B2-CE5F-41BE-8BED-DAD83519D95B		jp_co_roland_RDUSB012FDev_SF
AlTest1.err					powerlog
AlTest1.out					swtag.log
B062101C-F109-4C45-BB5A-60D9BA1C52C0

起動後
(mysql.sock他、関連ファイルが作成されている)

KENnoMacBook-ea:~ ken$ ls /tmp
0E1F6442-1C63-4CF3-90B2-A564219CFC84		com.adobe.AdobeIPCBroker.ctrl-ken
1D517B88-8385-4DFE-8F67-D30FB5232792		com.apple.launchd.3gC3HsE1gp
7A026307-61DF-46C8-94EB-4BA7FFAD9004		com.apple.launchd.xP0QeugEek
963B1E72-3D17-42FF-8821-65B1C412C712_IN		jp_co_roland_RDUSB012FDev_SF
963B1E72-3D17-42FF-8821-65B1C412C712_OUT	mysql.sock
ABF356B2-CE5F-41BE-8BED-DAD83519D95B		mysql.sock.lock
AlTest1.err					mysqlx.sock
AlTest1.out					mysqlx.sock.lock
B062101C-F109-4C45-BB5A-60D9BA1C52C0		powerlog
ExmanProcessMutex				swtag.log
adobegc.log

ログイン出来ない原因2. mysqlディレクトリの所有者が正しくない

先述の原因1を解決後、再度rootユーザでログインを試みましたが、異なるエラーが表示されました。

表示されたエラー
Starting MySQL

…. ERROR! The server quit without updating PID file (/usr/local/var/mysql/ユーザ名noMacBook-ea.pid).

/usr/local/var/mysql というディレクトリとファイルの所有者を _mysql にしないといけないようです。

sudo chown -R _mysql:_mysql /usr/local/var/mysql

再びMySQLを再起動
sudo mysql.server start

再起動出来たらもう一度 rootユーザで接続を試みます。
mysql -u root

MySQL再起動時の注意点!

MySQLの再起動を行った際、
mysqld_safe A mysqld process already exists
と出ている場合は再起動出来ていません!

Starting MySQL
SUCCESS!

とも出ているのでわかりづらいですが…

その場合は、直前のプロセスが残っている可能性がありきちんと終了させる必要があります。

残っているmysqlプロセスIDを確認
ps -ef | grep mysql

プロセスを強制終了
sudo kill -9 プロセスID

もしくはMySQLを停止後、再起動。
sudo mysql.server stop
sudo mysql.server start

解決にあたり今回は以下の記事を参考にさせていただきました。

https://qiita.com/masa_stone22/items/38a286a89c309de7d44e
https://qiita.com/mugi_chan_tea/items/e07dfee06a4310825f43
https://easyramble.com/mysql-server-pid-file-error.html

Follow me!