Ruby on Rails MySQL #08S01Bad handshake - downgrade MySQL?

后端 未结 3 1425
误落风尘
误落风尘 2021-02-02 13:18

We recently upgraded from MySQL 5.1.41 to 5.1.61 on our Ubuntu 10.04LTS server. We have an ancient RoR web app that\'s now giving a bad handshake error:

Mysql::E         


        
3条回答
  •  深忆病人
    2021-02-02 13:34

    Instead of downgrade MySQL gem, it's possible to fix the database name parameter to fix the "bad handshake" problem.

    I found this: https://github.com/rubygems/rubygems/issues/423 It's working good.

    Instead of doing a hack in real_connect it's possible to add the "\0" in config/database.yml

    production:
      database: "itsalive_production\0"
      adapter: mysql
      host: localhost
      encoding: UTF8
      ...
    

    EDIT
    If you use the solution with \0 at the end of the database name. You probably will find find out this and solve it yourself, but I mention it anyway:
    (at least in my version of Rails)
    Using the database string with \0 at the end gives problem when doing rake test. It starts with deleting the test database before copying the development database definitions, and then using a SQL command string that includes the test database name. This will cause an error because of the \0 in the middle of the string.

    In my case I'm using a local development database that doesn't give any problem so I don't need to have \0 in that name.
    Here is a alternative hack to solve that (original code in mysql_adapter.rb):

    module ActiveRecord
      module ConnectionAdapters
        class MysqlAdapter
    
          alias_method :old_execute, :execute
    
          def execute(sql, name = nil) #:nodoc:
            # This is needed because database names can end with "\0" to fix
            # the issue with "handshake" when mysql server is newer than the gem
            # requires. E.g. called when loading the new test db when doing "rake test".
            sql = sql.delete("\0")
    
            old_execute(sql, name)
          end
        end
      end
    end
    

提交回复
热议问题