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

Соответственно, я попробовал рассказать пакет для компиляции mysql2 с помощью mysql-config, но все же ошибка остается.

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

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


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

[[email protected]:/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 и снова установил все заново, а затем снова попытался установить драгоценный камень с флагом mysql-config. но все это оказалось бесполезным. Ошибка остается.

Изменить 2. Как было предложено Джоном Бачиром, я подтвердил, что mysql_config содержит MySQL версии 5.5.

Ответы

Ответ 1

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

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

Ответ 2

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

gem uninstall mysql2
gem install mysql2

Путь Gem был

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

Ответ 3

У меня была эта проблема, и мне просто нужно было перекомпилировать драгоценный камень. Я не знаю, есть ли более программный путь с bundler, но я только что удалил скомпилированную жемчужину, а затем повторно запустил 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

Ответ 4

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

Неверная версия клиентской библиотеки 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

а gem mysql2, установленный bundle install, - mysql2-0.3.13

Я решил эту проблему, просто установив gem mysql2 в более старую версию в Gemfile:

gem 'mysql2', '0.2.6'

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

Ответ 5

Вместо того, чтобы перемещать файлы библиотеки, вы также можете проверить список пакетов для своей системы - если вы обновили до 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

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

Ответ 6

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

1.find, в котором mysql_config зависит от вашей библиотеки gem.

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

cd /

sudo find -name "mysql" ./

2. Снова верните библиотеку mysql2 gem с помощью определенного пути mysql_config find на шаге 1

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

Ответ 7

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

Это с Percona Server 5.5 на Ubuntu Precise.

Ответ 8

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

rm -rf/Users/sjohnson/.rvm/gems/[email protected]_rails3
комплект поставки

Ответ 9

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

  • откройте этот mysql.gem mysql-2.9.1.gem\data.tar.gz\data.tar\ext\mysql_api\mysql.c

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

    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. SET HOMEDRIVE = c: ERROR: при выполнении gem... (Errno:: EINVAL) Недопустимый аргумент @rb_file_s_stat - U:/

установить локальный файл gem. C:\Rails > gem install --local mysql-2.9.1.gem --install-dir = c:/tmp --platform = ruby ​​- --with-mysql-dir = C:/Rails/mysql-connector -с mysql-connector-c посещать mysql http://dev.mysql.com/downloads/connector/c/. вам не нужна версия.

Повторите попытку. require 'mysql'

Ответ 10

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

Ответ 11

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

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

Ответ 12

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

ln -s /usr/local/bin/mysql /usr/local/mysql

Затем запустите bundle install.

Ответ 13

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