Ruby mysql2 gem скомпилирован для неправильной версии клиентской библиотеки mysql

после обновления MySQL до 5.5 с помощью apt-get,mysql2 камень перестал работать.

вот ошибка:

Incorrect MySQL client library version!
This gem was compiled for 5.5.17 but the client library is 5.1.58. (RuntimeError)

Я попытался переустановить с mysql_config, но это, похоже, не имеет значения..

gem install mysql2 -- --with-mysql-config=/usr/bin/mysql_config

соответственно, я попытался сказать bundle скомпилировать mysql2 с mysql-config, но все же ошибка остается..

bundle config build.mysql2 --with-mysql-config=/usr/bin/mysql_config
bundle install

когда я попробовал более старую версию gem (v0.2.6) консоль rails открывается, но падает после запуска любого тип запроса.


вот полный стек ошибок при попытке самой последней версии mysql2 gem:

[marco@linode:/www] 07:29:00 AM: rails c
/users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mysql2-0.3.10/lib/mysql2.rb:9:in `require': Incorrect MySQL client library version! This gem was compiled for 5.5.17 but the client library is 5.1.58. (RuntimeError)
  from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/mysql2-0.3.10/lib/mysql2.rb:9:in `<top (required)>'
  from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `require'
  from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:68:in `block (2 levels) in require'
  from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `each'
  from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:66:in `block in require'
  from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `each'
  from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler/runtime.rb:55:in `require'
  from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/bundler-1.0.21/lib/bundler.rb:122:in `require'
  from /www/config/application.rb:7:in `<top (required)>'
  from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/commands.rb:38:in `require'
  from /users/marco/.rbenv/versions/1.9.3-p0/lib/ruby/gems/1.9.1/gems/railties-3.1.1/lib/rails/commands.rb:38:in `<top (required)>'
  from script/rails:6:in `require'
  from script/rails:6:in `<main>'

редактировать: я удалил все mysql2 gemspecs из кэша, удалил все связанные с mysql пакеты через apt-get и переустановил все заново, затем снова попытался установить gem с флагом mysql-config .. но все оказалось тщетным. Ошибка остается.

Изменить 2: как предложил Джон Башир, Я подтвердил, что mysql_config содержит MySQL версии 5.5.

13 ответов


я столкнулся с той же ошибкой при использовании Ubuntu Server 11.04 и сервера Percona, что я сделал:

заменить /usr/lib/libmysqlclient.so.16.0.0 с /usr/lib/libmysqlclient.so.18.0.0


поздно на вечеринку, но я только что сделал

gem uninstall mysql2
gem install mysql2

драгоценный камень путь был

$ bundle show mysql2
/var/lib/gems/1.9.1/gems/mysql2-0.3.16

У меня была эта проблема, и мне просто нужно было перекомпилировать драгоценный камень. Я не знаю, есть ли более программный способ с bundler, но я просто удалил скомпилированный gem, а затем повторно запустил bundler:

$ bundle show mysql2
/usr/local/rvm/gems/ruby-1.9.3-p385/bundler/gems/mysql2-32dd7e5bbeba
$ rm -rf /usr/local/rvm/gems/ruby-1.9.3-p385/bundler/gems/mysql2-32dd7e5bbeba
$ bundle

я столкнулся с аналогичной проблемой:

неправильная версия клиентской библиотеки MySQL! Этот камень был скомпилирован для 5.6.12 но клиентская библиотека 5.5.28.

и моя версия MySQL на Mac:

$ mysql --version
mysql  Ver 14.14 Distrib 5.6.12, for osx10.8 (x86_64) using  EditLine wrapper

и драгоценный камень mysql2, установленный bundle install является mysql2-0.3.13

Я решил эту проблему, просто установив драгоценный камень mysql2 в более старую версию в Gemfile:

gem 'mysql2', '0.2.6'

если '0.2.6' не работает для вас, вы могли бы попробуйте другой старый номер версии.


вместо того, чтобы перемещать файлы библиотек, вы также можете проверить список пакетов для своей системы-если вы обновили до 5.5 с помощью apt-get, вероятно, у вас все еще есть библиотеки 5.1, которые вам больше не нужны. Например, в системе, где мы столкнулись с подобной проблемой, у нас все еще была библиотека 5.1:

$ sudo dpkg -l | grep mysql
ii  libmysqlclient-dev               5.5.13-rel20.4-136.lucid                 Percona Server database development files
ii  libmysqlclient16                 5.1.61-rel13.2-431.lucid                 Percona Server database client library
ii  libmysqlclient18                 5.5.13-rel20.4-136.lucid                 Percona Server database client library

вместо того, чтобы копировать библиотеку 5.5 через библиотеку 5.1, вы должны иметь возможность удалить ее:

$ sudo apt-get remove libmysqlclient16

для нас, это было более надежнее, чем решение переименования библиотеки, предложенное ранее.


Я снова встречаю эту проблему, и я не мог решить ее с помощью моего предыдущего метода(используйте более старую версию mysql2 gem). Поэтому я пробую другой метод, как этот шаг:

1.найдите mysql_config, от которого зависит ваша библиотека gem.

mysql_config ситуация отличается в машине разных людей, и одна машина людей может иметь несколько mysql_config, поэтому нет стандартного пути mysql_config для всех. Как этот вопрос, например, версия mysql_config - "5.1.58", поэтому вы можете искать файл " mysql "в root, чтобы найти, что связано с"5.1.58":

cd /

sudo find -name "mysql" ./

2.установите mysql2 gem library снова с конкретным mysql_config путь найти в шаге 1

gem install mysql2 -- --with-mysql-config=<%your_specific_mysql_config_path%>

кроме того, чтобы убедиться, что только libmysqlclient18 библиотека была установлена (а не 16), что заставило ее работать для меня, это установка libmysqlclient18-dev (заголовки dev).

это с Фирконом 5.5 сервер на Ubuntu точным.


Я попробовал все ответы выше, и мой окончательный подход был довольно прост - удалите весь пакет Gem stack и переустановите все. Это, наконец, обошло проблему клиента mysql. т. е.

rm-rf / пользователи / sjohnson/.rvm/gems/ruby-1.9.3-p484@adp_rails3
bundle install


Если вы знаете программу c, вы можете удалить это сообщение. опусти это.

  1. откройте этот mysql.

  2. найти "этот драгоценный камень был скомпилирован для", удалите это предложение if .

    if (lib[i] != MYSQL_SERVER_VERSION[i]) { Line 1897: rb_raise(rb_eRuntimeError, "Incorrect MySQL client library version! This gem was compiled for %s but the client library is %s.", MYSQL_SERVER_VERSION, lib); }
    

вам нужно установить sys-переменную для локальной установки gemfile в системе windows . Набор ДИСК_ДОМАШНЕЙ_ПАПКИ=с: Ошибка: при выполнении камень ... (Errno::EINVAL) недопустимый аргумент @ rb_file_s_stat - U:/

установите локальный файл gem . C:\Rails > gem install --локальный mysql-2.9.1.Гэм-установить-реж=ц: в/tmp --платформа= Рубин -- --с-для MySQL маршрутизатор dir=с:/рельсы/в MySQL-разъем-с mysql-connector-c посещение mysql http://dev.mysql.com/downloads/connector/c/ . тебе плевать версия.

снова попробовать. требуется "mysql"


убедитесь в том, что /usr/bin/mysql_config действительно тот, который пришел с 5.5.


в моем случае у меня были различные файлы из libmysqlclient15 (датированные 2009) и libmysqlclient16 (датированные 20012), оставленные в /usr/lib, возможно, от неудачного обновления Ubuntu.

удаление файлов libmysqlclient15 (которые были связаны с libmysqlclient15.Итак) решил мою проблему.


на моей машине мне пришлось удалить камень, а затем вновь прямой ссылке /usr/local/mysql к правильной версии Homebrew:

ln -s /usr/local/bin/mysql /usr/local/mysql
выполнить bundle install.

переустановите libmysqlclient-dev с помощью apt remove libmysqlclient-dev && apt install libmysqlclient-dev исправлена для меня