LoginSignup
33
26

More than 5 years have passed since last update.

Ruby On RailsでMySQLのSocketエラーが出た時は素直にlocalhostを127.0.0.1に直すのが一番いいと思う

Last updated at Posted at 2015-06-03

Ruby On RailsでMySQLを使っている時に、

"can't connect to mysql database using /tmp/mysql.socket"

といったエラーが出ることがあります。

これは、MySQL側で使っているsocketと、RubyのMySQLコネクタが使っているsocketが異なっているために発生する現象で、解決策は巷によく載っています。

だいたい書いてあるのは、

1) my.cnfのsocket設定2箇所をいじってMySQL側をRubyに合わせる
2) lib/ruby-mysql***のソースをいじって、Ruby側をMySQLに合わせる

の2つで、直接の原因であるsocket不一致を解消する方法として異存はないですが、

1)は、ほかのアプリ(例えばphpとか)やコマンドに影響でそうでこわい、
2)は、(個人の好みですが)なるべくgemとかで入ってるライブラリを手でさわりたくない

ってことで抵抗があります。

で、上記以外の方法として

3) database.ymlのhostのlocalhostを、127.0.0.1に変更する

というのがあります。

これは、MySQLへの接続を、localhostでなくて、127.0.0.1として接続する方法ですが、
こうすると、通常エラーは解消されます。

なんでだろー、localhostも127.0.0.1も同じじゃねー?って思いますが、以下が参考になります。
http://qiita.com/TanukiTam/items/f6a08740d0fcda0db7be

MySQLは、localhost指定すると、問答無用でsocket接続を試みて、127.0.0.1だと通常のTCP/IP接続をするようです。

なので、3)は、そもそも元凶のsocket通信自体回避する方法です。

直すのあっという間だし、影響も自分のアプリだけなので、3)がいい気がしますが、ググってたどり着く回答は1)、2)が多くて、3)はちょっと控えめって感じです。

Railsに詳しくないので、hostの部分をlocalhostにしておいたほうがよい理由があるのかなー。
(MySQL、Railsに詳しい人の知見求む)

33
26
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
33
26