【Rails】ローカルホストでmysql.sockがないってエラー

ローカルでWebrickを立ち上げようとしたときに起こる以下のようなエラーの解決策。

Can't connect to local MySQL server through socket '/opt/lampp/var/mysql/mysql.sock' (2)

エラーの意味としては、「mysqlに接続するためのソケットファイルが指定した場所にないじゃん」ってことになる。要すると、config/database.ymlできちんとmysqlのソケットファイルのパスを指定してやればokです。

以下を参考に、詳細な解決方法。

osx - Cannot find mysql.sock - Stack Overflow

まず下のコマンドを叩いて、mysql.sockファイルへのパスが書かれてる場所を探します。

% mysqladmin variables

それかMacならlocateコマンドとかで探しても良いと思う。


追記 (2015/10/26)

mysql_configにsocketオプションをつけると一発でパスだけ調べれることを知りました。こっちの方が全然ラクだった。

$ mysql_config --socket
/tmp/mysql.sock

そもそもsocketファイルがない、みたいなときは以下の方法をとればsocketファイルを生成してくれます。

osx snow leopard - mysql.sock is not created OSX - Stack Overflow

/etc/my.confを以下みたいに作成。

[mysqld]
socket=/var/mysql/mysql.sock

[client]
socket=/var/mysql/mysql.sock

これでmysqld_safeを走らせれば、mysqlのデーモンプロセスが走るので、この設定ファイルを読んで指定の場所にmysql.sockを作成してくれます。自分の場合、Mac OS Xでパスは以下だった。

$ /usr/local/bin/mysqld_safe

mysqld_safeについては以下が参考になる。

http://open-groove.net/mysql/mysqld-mysqldsafe/


そしたらrailsアプリのdatabase.ymlで、socketファイルの指定場所を、さっき確認したところに変更します。

動きます(はず!!!)

参考: Rails: Can't connect to local MySQL server through socket - Stack Overflow