Gần đây chúng tôi đã nâng cấp từ MySQL 5.1.41 lên 5.1.61 trên máy chủ Ubuntu 10.04LTS của chúng tôi. Chúng tôi có một ứng dụng web RoR xưa đó là bây giờ đưa ra một lỗi bắt tay xấu:Ruby on Rails MySQL # 08S01Bắt tay bắt tay - hạ cấp 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
Tôi googled xung quanh và vấp vào http://bugs.ruby-lang.org/issues/5017 mà nói với tôi đó là một phần mở rộng của Ruby lỗi MySQL. Chúng tôi không sử dụng đá quý MySQL. Ứng dụng web của chúng tôi cực kỳ cũ và dễ vỡ (Ruby v1.8.7, Rails v1.2.3, Mongrel 1.1.5). Chúng tôi đang trong quá trình thay thế bằng ghi đè Django, vì vậy chúng tôi chỉ cần thực hiện chức năng này trong vài tuần tới cho đến khi chúng tôi thay thế bằng trang web mới.
Làm cách nào để vượt qua lỗi này? Tôi nghĩ rằng việc hạ cấp xuống MySQL 5.1.41 là cách tốt nhất để xử lý việc này, và sau đó khi chúng tôi bắt đầu sử dụng trang web mới trong một vài tuần, chúng tôi có thể nâng cấp lại lên 5.1.61. Tuy nhiên, tôi đang gặp sự cố khi hạ cấp mysql. Đây là lệnh Tôi đang sử dụng:
sudo aptitude install mysql-server-5.1=5.1.41-3ubuntu12.10
Tuy nhiên, điều này nói với tôi Unable to find a version "5.1.41-3ubuntu12.10" for the package "mysql-server-5.1"
. Tôi cũng đã thử sudo aptitude install mysql-server-5.1=5.1.41
, nhưng điều đó cũng không hoạt động. Làm thế nào tôi có thể có aptitude cài đặt phiên bản chính xác của MySQL?
* Tôi nghĩ rằng hạ để MySQL 5.1.41 là cách tốt nhất để xử lý này * Nếu mã kết nối cơ sở dữ liệu của bạn là tập trung , có lẽ sử dụng giải pháp thay thế trong liên kết của bạn? * Một giải pháp để tránh vấn đề này là không thiết lập một cơ sở dữ liệu khi thiết lập kết nối. * –
Có lẽ nó chỉ là tôi không quen thuộc với RoR, nhưng tôi không chắc chắn làm thế nào để làm điều này. Các thiết lập kết nối cơ sở dữ liệu nằm trong 'config/database.yml', và tôi không chắc chắn làm cách nào khác để có được trang web để giao tiếp với MySQL mà không chỉ định tên cơ sở dữ liệu trong tệp đó. Tôi đã cố gắng bình luận ra tên cơ sở dữ liệu, nhưng tôi nhận được một lỗi mới: 'Không có cơ sở dữ liệu được chỉ định. Thiếu đối số: database.' – Geoff
Tôi vừa gặp phải vấn đề tương tự khi nâng cấp từ .49 lên .61. Trên Debian Squeeze, hạ cấp với: '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