Recientemente actualizamos de MySQL 5.1.41 a 5.1.61 en nuestro servidor Ubuntu 10.04LTS. Tenemos una antigua aplicación web RoR que ahora está dando un error de protocolo de enlace malo:Ruby on Rails MySQL # 08S01Bad handshake - downgrade MySQL?
Mysql::Error in MainController#index
#08S01Bad handshake
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/vendor/mysql.rb:523:in `read'
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/vendor/mysql.rb:153:in `real_connect'
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapters/mysql_adapter.rb:389:in `connect'
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapters/mysql_adapter.rb:152:in `initialize'
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapters/mysql_adapter.rb:82:in `new'
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapters/mysql_adapter.rb:82:in `mysql_connection'
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:262:in `send'
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:262:in `connection_without_query_cache='
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/query_cache.rb:54:in `connection='
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:230:in `retrieve_connection'
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/connection_adapters/abstract/connection_specification.rb:78:in `connection'
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:763:in `columns'
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:2060:in `attributes_from_column_definition_without_lock'
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/locking/optimistic.rb:45:in `attributes_from_column_definition'
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/base.rb:1502:in `initialize_without_callbacks'
/usr/lib/ruby/gems/1.8/gems/activerecord-1.15.3/lib/active_record/callbacks.rb:225:in `initialize'
#{RAILS_ROOT}/app/controllers/application.rb:48:in `new'
#{RAILS_ROOT}/app/controllers/application.rb:48:in `log_info'
/usr/local/bin/mongrel_rails:19:in `load'
/usr/local/bin/mongrel_rails:19
Googled alrededor y se topó con http://bugs.ruby-lang.org/issues/5017 la que me dice que es un error de extensión Rubí MySQL. No estamos usando la gema MySQL. Nuestra aplicación web es increíblemente vieja y frágil (Ruby v1.8.7, Rails v1.2.3, Mongrel 1.1.5). Estamos en el proceso de reemplazarlo con una reescritura de Django, por lo que solo debemos ponerlo funcional durante las próximas semanas hasta que lo reemplacemos con el nuevo sitio.
¿Cómo podemos superar este error? Estoy pensando que la degradación a MySQL 5.1.41 es la mejor manera de manejar esto, y luego cuando comencemos a usar el nuevo sitio en unas pocas semanas, podemos volver a actualizar a 5.1.61. Sin embargo, estoy teniendo un problema degradando mysql. Este es el comando que estoy usando:
sudo aptitude install mysql-server-5.1=5.1.41-3ubuntu12.10
Sin embargo, esto me dice Unable to find a version "5.1.41-3ubuntu12.10" for the package "mysql-server-5.1"
. He intentado sudo aptitude install mysql-server-5.1=5.1.41
también, pero eso tampoco funcionó. ¿Cómo puedo tener aptitude para instalar la versión correcta de MySQL?
* Estoy pensando que la degradación hasta MySQL 5.1.41 es la mejor manera de manejar esto * Si su código de conexión de base de datos está centralizado , tal vez usar la solución alternativa en su enlace? * Una solución alternativa para evitar este problema es no establecer una base de datos al establecer la conexión. * –
Quizás es solo que no estoy tan familiarizado con RoR, pero no estoy seguro de cómo hacer esto. La configuración de conexión de la base de datos está en 'config/database.yml', y no estoy seguro de cómo lograr que el sitio interactúe con MySQL sin especificar el nombre de la base de datos en ese archivo. Intenté comentar el nombre de la base de datos, pero aparece un nuevo error: 'No se especificó ninguna base de datos. Falta argumento: base de datos. – Geoff
Acabo de encontrar el mismo problema en la actualización de .49 a .61. En Debian Squeeze, degradado con: 'sudo aptitude install mysql-server-5.1 = 5.1.49-3 mysql-client-5.1 = 5.1.49-3 mysql-common = 5.1.49-3 mysql-server-core-5.1 = 5.1.49-3 libmysqlclient16 = 5.1.49-3'. – gsreynolds