Railsアプリ起動でmysqlのエラーが出た。
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)
(注)ただ起動していないだけかもしれないので
sudo mysql.server start
して「SUCCESS!」と出なかったら以下を実行する
ここで注意したいのがsudoつけ忘れでも"permission denied"のエラーがでないということ
mysql.server start
にはsudoつける
sudo つければ普通に起動できる
自分が確認した順にまとめたので順番おかしかったらコメント等お願いします。
原因1:読み込み先がとsocketの位置が合ってない
config/database.ymlのsocketで指定してるとこと合ってるか確認
mysql_config --socket
でsocketの位置が確認できる。
mysql --help | grep my.cnf
で設定ファイルの場所を確認できる。
原因2:socketがない
上で確認した場所にsoketがない
$ sudo touch /tmp/mysql.sock
で作成して
$ mysql -u root -p
したら
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)
原因3:mysqlが起動していない
$ ps ax | grep mysqld
起動できていない場合↓
6359 s002 S+ 0:00.00 grep mysqld
起動できている場合↓
28424 ?? S 0:00.02 /bin/sh /usr/local/Cellar/mysql@5.7/5.7.25/bin/mysqld_safe --datadir=/usr/local/var/mysql --pid-file=/usr/local/var/mysql/hogehogenoMacBook-Pro.local.pid
28532 ?? S 0:01.71 /usr/local/Cellar/mysql@5.7/5.7.25/bin/mysqld --basedir=/usr/local/Cellar/mysql@5.7/5.7.25 --datadir=/usr/local/var/mysql --plugin-dir=/usr/local/Cellar/mysql@5.7/5.7.25/lib/plugin --user=mysql --log-error=hogehogenoMacBook-Pro.local.err --pid-file=/usr/local/var/mysql/hogehogenoMacBook-Pro.local.pid
29875 s001 R+ 0:00.00 grep mysqld
原因3:socketに権限がない
$ chmod 777 /tmp/mysql.sock
してmysql -u root -pしても
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (38)
$ chmod g+w /tmp/mysql.sock
↑こっちでも同じエラーだった。
これしたら起動できた。
$ sudo chown mysql:mysql /tmp
どれが一番いい権限の付与の方法かはわからない。
原因4:mysql.server startしてないのにmysqlにログインしようとしてた
$ mysql -u root -p
はmysql起動してないとできるわけがない(当たり前すぎる)
socke作ったり、権限付与したらちゃんと
$ sudo mysql.server restart
してから
$ mysql -u root -p
すること。
まとめ
- socketの指定位置確認
- socket自体あるか確認
- なければ作る
- 権限あたえる
- restart
- mysql -u root -p
補足
mysql.server startにsodoを忘れると
Starting MySQL
. ERROR! The server quit without updating PID file (/usr/local/var/mysql/XXXXXXXXXXXXX.pid).
というエラーが出る。