一日かけてmysql socketの問題に当たり続けたので備忘録として書きます(rails初学者用)
間違っていたらご指摘を本当にお願いします。
development環境 socketの標準場所
/tmp/mysql.socket
production環境 socketの標準場所
/var/lib/mysql/mysql.sock
確認方法は以下コマンドから(各環境にて)
$ mysql -u root -p
(mysqlのパスワード要)
mysql> show variables like '%sock%';
上記ソケットを通してmysqlにアクセスしてます。
sockファイルは自動生成されるので、自分で作る必要はありません。
Can't connect to local MySQL server through socket '/tmp/mysql.sock'(2)
Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'(2)
上記のようなエラーが出た場合、SQLファイルがないということですが、自分で作るより前にMysqlのrestartを試しましょう。
解決するか、後ろの()の数字が変わった別のエラーになります。権限エラーの38、アクセス拒否の111など。
筆者はvimで空の mysql.sock を作ったのですが、「こいつは偽物や!消してくれ!」というエラーをいただきました。
作り方や権限の問題かもしれませんが、自分では作らない方が良いかと。
なお、sockファイルの場所については my.cnfというmysqlの設定ファイルで変更できます
$ sudo vim /etc/my.cnf
でもまずは・・・
エラーのコードよりもなぜ起きたのかを考えましょう。
筆者が一番捕まったのは、
production(のつもり)rails → development環境だと判断
development環境なのでsocketの位置が違う
ということでした。