Bug #5017
closedMysql::Error: #08S01Bad handshake
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 13 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 13 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.