接続した後に MySQL サーバを再起動すると表題のエラーが発生します。再現手順と環境は以下の通りです。
% uname -a
Linux precision-debian 2.6.26-2-amd64 #1 SMP Sun Jun 20 20:16:30 UTC 2010 x86_64 GNU/Linux
% ruby -v
ruby 1.9.3dev (2010-07-07 trunk 28561) [x86_64-linux]
% sudo invoke-rc.d mysql restart
[sudo] password for ogawa:
Stopping MySQL database server: mysqld.
Starting MySQL database server: mysqld . ..
Checking for corrupt, not cleanly closed and upgrade needing tables..
再び irb で mysql.stat を実行するとエラーになります。
ruby-head > my.stat
NoMethodError: undefined method `unpack' for nil:NilClass
from /home/ogawa/.rvm/gems/ruby-head/gems/ruby-mysql-2.9.3/lib/mysql/protocol.rb:567:in `block in read'
from /home/ogawa/.rvm/rubies/ruby-head/lib/ruby/1.9.1/timeout.rb:44:in `timeout'
from /home/ogawa/.rvm/gems/ruby-head/gems/ruby-mysql-2.9.3/lib/mysql/protocol.rb:565:in `read'
from /home/ogawa/.rvm/gems/ruby-head/gems/ruby-mysql-2.9.3/lib/mysql/protocol.rb:641:in `block in simple_command'
from /home/ogawa/.rvm/gems/ruby-head/gems/ruby-mysql-2.9.3/lib/mysql/protocol.rb:545:in `synchronize'
from /home/ogawa/.rvm/gems/ruby-head/gems/ruby-mysql-2.9.3/lib/mysql/protocol.rb:638:in `simple_command'
from /home/ogawa/.rvm/gems/ruby-head/gems/ruby-mysql-2.9.3/lib/mysql/protocol.rb:413:in `statistics_command'
from /home/ogawa/.rvm/gems/ruby-head/gems/ruby-mysql-2.9.3/lib/mysql.rb:502:in `stat'
from (irb):5
from /home/ogawa/.rvm/rubies/ruby-head/bin/irb:17:in `'
接続した後に MySQL サーバを再起動すると表題のエラーが発生します。再現手順と環境は以下の通りです。
まずirbで接続してそのままにします。
別のターミナルでMySQLサーバを再起動します。
再び irb で mysql.stat を実行するとエラーになります。
MySQL::Protocol#readの @sock.read(4) が nil になるのが原因のようです。 エラーはともかく、NoMethodErrorでは何が起こったのかわかりにくいので、nil なら Errno::EPIPE: Broken pipe になるなどの対策をお願いしたいところです。