DRYな備忘録

Don't Repeat Yourself.

No such file or directory - /tmp/mysql.sock (Errno::ENOENT)【ruby-mysql】【rubygems】【Ruby】【Debian】

【問題】

rubyスクリプトからruby-mysqlというgemを使ってMySQLにアクセスしたいのに、以下のエラーが出る

/usr/lib/ruby/gems/1.8/gems/ruby-mysql-2.9.10/lib/mysql/protocol.rb:167:in `initialize': No such file or directory - /tmp/mysql.sock (Errno::ENOENT)
    from /usr/lib/ruby/gems/1.8/gems/ruby-mysql-2.9.10/lib/mysql/protocol.rb:167:in `new'
	from /usr/lib/ruby/gems/1.8/gems/ruby-mysql-2.9.10/lib/mysql/protocol.rb:167:in `initialize'
	from /usr/lib/ruby/1.8/timeout.rb:53:in `timeout'
	from /usr/lib/ruby/gems/1.8/gems/ruby-mysql-2.9.10/lib/mysql/protocol.rb:164:in `initialize'
	from /usr/lib/ruby/gems/1.8/gems/ruby-mysql-2.9.10/lib/mysql.rb:114:in `new'
	from /usr/lib/ruby/gems/1.8/gems/ruby-mysql-2.9.10/lib/mysql.rb:114:in `connect'
	from /usr/lib/ruby/gems/1.8/gems/ruby-mysql-2.9.10/lib/mysql.rb:49:in `connect'
	from sample.rb:4

ちなみにsample.rbは

require 'rubygems'
require 'mysql'
require 'myconf'#ただのconfファイル./myconf.rb

client = Mysql.connect(DBHOST, DBUSER, DBPASS, DBNAME)

【原因】

mysql.sockって名前からして、アプリケーションとMySQLをつなげるファイルなんだろーなー...

% ls -la /tmp | grep mysql.sock
# やはり無い

ぐぐってもだいたい「/tmp/mysql.sockがあってだな」というエントリばっかりなので「これはもしやLinuxディストリビューションの問題では?」と思って「Debian mysql.sock」でぐぐったら

グニャラくんのグニャグニャ備忘録@はてな

% ls -la /var/run/mysqld | grep msyqld.sock

したらあったビンゴ

【解決】

もうちょっと調べなきゃいけない気もするけれど、とりあえずmysql.sockがありゃいいんだろ、的な

% cd /tmp
% sudo ln -s /var/run/mysqld/mysqld.sock mysql.sock

で、sample.rb実行したらエラー消えた

【雑感】

mysql.sockとmysqld.sockのちがいをちゃんと調べなきゃ

f:id:otiai10:20130317193514j:plain

 

日本語的に「ソケット」ってどっちだっけ刺す方?刺される方?

 

DRY