Project

General

Profile

Actions

Bug #5017

closed

Mysql::Error: #08S01Bad handshake

Added by encaps (Andrew Ivanov) over 10 years ago. Updated over 10 years ago.

Status:
Rejected
Priority:
Normal
Assignee:
-
Target version:
ruby -v:
ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-linux]
[ruby-core:38001]

Description

Summary:
if ruby-1.8.7 is compiled from src (not binary from rpm), it can't connect to mysql-5.1.58:
Mysql::Error: #08S01Bad handshake

Environment:
ruby 1.8.7 (2011-06-30 patchlevel 352) [i686-linux]
mysql-5.1.58
Linux fedora12 2.6.31.5-127.fc12.i686.PAE #1 SMP Sat Nov 7 21:25:57 EST 2009 i686 i686 i386 GNU/Linux

How to reproduce the issue:
wget ftp://ftp.ruby-lang.org/pub/ruby/1.8/ruby-1.8.7-p352.tar.gz
tar -xzvf ruby-1.8.7-p352.tar.gz
cd ruby-1.8.7-p352
./configure && make && make install
ln -s /usr/local/bin/ruby /usr/bin/ruby

wget http://rubyforge.org/frs/download.php/74374/rubygems-1.6.0.tgz
tar xzvf rubygems-1.3.7.tgz
cd rubygems-1.3.7
ruby setup.rb

gem install rails -v=1.2.5

cd /var/www/
rails testproject
cd testproject
script/console

  ActiveRecord::Base.establish_connection(
    :adapter  => "mysql",
    :host     => "localhost",
    :username => "root",
    :password => "pwd",
    :database => "test",
    :port => 3306
  )

ActiveRecord::Base.connection.select_all("SELECT NOW();")

Mysql::Error: #08S01Bad handshake
from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/vendor/mysql.rb:523:in read'
from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/vendor/mysql.rb:153:in
real_connect'
from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/connection_adapters/mysql_adapter.rb:389:in connect'
from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/connection_adapters/mysql_adapter.rb:152:in
initialize'
from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/connection_adapters/mysql_adapter.rb:82:in new'
from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/connection_adapters/mysql_adapter.rb:82:in
mysql_connection'
from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/connection_adapters/abstract/connection_specification.rb:262:in send'
from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/connection_adapters/abstract/connection_specification.rb:262:in
connection_without_query_cache='
from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/query_cache.rb:54:in connection='
from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/connection_adapters/abstract/connection_specification.rb:230:in
retrieve_connection'
from /usr/local/lib/ruby/gems/1.8/gems/activerecord-1.15.5/lib/active_record/connection_adapters/abstract/connection_specification.rb:78:in `connection'
from (irb):1

#############
But if ruby is installed from binaries under Fedora Core 14 (rpm is available for Fedora14, the same ruby version, gems, the same remote mysql server) - everything is ok, no mysql error.

So, the question is: is it possible to compile ruby-1.8.7 from src (for old Linux release) without mysql error?

Updated by darnaut (Davi Arnaut) over 10 years ago

Looking at the code:

def real_connect(host=nil, user=nil, passwd=nil, db=nil, port=nil, socket=nil, flag=nil)
[...]
if db and @server_capabilities & CLIENT_CONNECT_WITH_DB != 0
data << "\0" if @pre_411
data << db
@db = db.dup
end

The sent database name is not null-terminated, which is required by the 4.1 version of the MySQL protocol. This used to work in MySQL versions earlier than 5.1.57 because the authentication code used to accept non-conformant packets. Anyway, this will probably be addressed in MySQL. A workaround to avoid this problem is to not set a database when establishing the connection.

Updated by drbrain (Eric Hodel) over 10 years ago

  • Status changed from Open to Rejected
  • Priority changed from 5 to Normal

This is not ruby's bug, it is the ruby mysql extension's bug. Please file it on the bug tracker for the ruby mysql extension.

Actions

Also available in: Atom PDF