問題
ソケット'/tmp/mysql.sock'を通じてローカルのMySQLサーバーに接続することができない。
下記の図で言うと、クライエント側からMySQLサーバーに接続しようとしていて、接続するためには'/tmp/mysql.sock'というファイルを出力する必要があるのだが、それができない状態。
ソケットとは何か?
ソケットはプロセスやネットワーク間の通信を行う部分のこと。
MySQLではこのソケットを通してサーバーとクライアントが接続される。
※と書いてみたものの、まだネットワークの理解も、MySQLのクライエント側とサーバー側というのもよくわかっていないので、また調べて追記する。
問題の原因は?
MAMPを起動して、そちらでポート番号(3306)を開いていて重複してしまったため。
MySQLのポート番号は3306と決まってお利、特定のポート番号は重複して使えない。
今回はPHPの学習をするためにMAMPを起動していたので、一旦MAMPを停止しポート番号の重複を避ける必要があった。
原因を知るまでに試したこと
①MySQLを起動できているか確認
$ mysql -u root -p
このコマンドでMySQLに入ろうとしたが、冒頭のと同じエラーが出てしまった。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
naota7118@Naotas-MacBook-Air-6 pfc-master %
②database.ymlを確認
default:
adapter: mysql2
encoding: utf8mb4
charset: utf8mb4
collation: utf8mb4_unicode_ci
pool: 5
username: root
password: password
host: db
wait_timeout: 180
# socket: /tmp/mysql.sock←
←の部分をコメントにしたりコメントではなくしてみたり試したが、変わらなかった。
この設定はいらなかったようだ。
③MySQLサーバーが起動しているか確認
MySQLサーバーは起動していてポート番号3306が使われていることに気づいた。
naota7118@Naotas-MacBook-Air-6 pfc-master % ps ax | grep mysqld
28532 ?? S 0:00.07 /bin/sh /Applications/MAMP/Library/bin/mysqld_safe --port=3306 --socket=/Applications/MAMP/tmp/mysql/mysql.sock --pid-file=/Applications/MAMP/tmp/mysql/mysql.pid --log-error=/Applications/MAMP/logs/mysql_error_log
28824 ?? S 0:01.92 /Applications/MAMP/Library/bin/mysqld --basedir=/Applications/MAMP/Library --datadir=/Applications/MAMP/db/mysql57 --plugin-dir=/Applications/MAMP/Library/lib/plugin --log-error=/Applications/MAMP/logs/mysql_error_log.err --pid-file=/Applications/MAMP/tmp/mysql/mysql.pid --socket=/Applications/MAMP/tmp/mysql/mysql.sock --port=3306
31583 s002 R+ 0:00.00 grep mysqld
解決方法
MAMPを停止させた。
もし同じエラーが出たら、別のところでMySQLを起動していないか確認してみるといいかもしれない。
参考記事