可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试):
问题:
After updating MySQL to 5.5 using apt-get, the mysql2
gem stopped working.
Here's the error:
Incorrect MySQL client library version!
This gem was compiled for 5.5.17 but the client library is 5.1.58. (RuntimeError)
I tried reinstalling with mysql_config but it doesn't seem to make a difference..
gem install mysql2 -- --with-mysql-config=/usr/bin/mysql_config
Correspondingly, I tried telling bundle to compile mysql2 with mysql-config but still, the error remains..
bundle config build.mysql2 --with-mysql-config=/usr/bin/mysql_config
bundle install
When I tried an older version of the gem (v0.2.6) the rails console opens but crashes once I run any type of query.
Here's the full error stack when trying the most current version of the 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>'
Edit: I removed all mysql2 gemspecs from cache, uninstalled all mysql-related packages via apt-get and reinstalled everything afresh, then tried again to install the gem with the mysql-config flag .. but it all proved futile. The error remains.
Edit 2: As suggested by John Bachir, I confirmed that mysql_config contains MySQL version 5.5.
回答1:
I have encounter the same error when using Ubuntu Server 11.04 and Percona Server, what have I done was:
replace /usr/lib/libmysqlclient.so.16.0.0
with /usr/lib/libmysqlclient.so.18.0.0
回答2:
Late to the party, but I just did
gem uninstall mysql2
gem install mysql2
Gem path was
$ bundle show mysql2
/var/lib/gems/1.9.1/gems/mysql2-0.3.16
回答3:
I had this problem and just needed to recompile the gem. I don't know if there's a more programmatic way with bundler, but I just removed the compiled gem and then re-ran 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:
I came across a similar problem:
Incorrect MySQL client library version! This gem was compiled for 5.6.12 but the client library is 5.5.28.
And my MySQL version on Mac:
$ mysql --version
mysql Ver 14.14 Distrib 5.6.12, for osx10.8 (x86_64) using EditLine wrapper
and the mysql2 gem installed by bundle install
is mysql2-0.3.13
I solved this problem by just setting the mysql2 gem to an older version in the Gemfile:
gem 'mysql2', '0.2.6'
If '0.2.6'
does not work for you, you could try another old version number.
回答5:
Rather than moving library files, you might also check the package list for your system -- if you upgraded to 5.5 using apt-get, it's likely that you still have 5.1 libraries lying around that you don't need anymore at all. For example, on a system where we encountered a similar issue, we still had the 5.1 library:
$ 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
Rather than copying the 5.5 library over the 5.1 library, you should be able to remove it:
$ sudo apt-get remove libmysqlclient16
For us, this has been more reliable than the library renaming solution proposed earlier.
回答6:
I meet this problem again and I could not solve it with my previous method(use an older version mysql2 gem). So I try another method as these step:
1.find which mysql_config that your gem library depend on.
mysql_config situation is different in different people's machine, and one people machine can have several mysql_config, so there is no standard mysql_config path for everyone.
As this question for example, the mysql_config version is "5.1.58", so you can search "mysql" file in root to find which has related with "5.1.58":
cd /
sudo find -name "mysql" ./
2.install mysql2 gem library again with specific mysql_config path find in step 1
gem install mysql2 -- --with-mysql-config=<%your_specific_mysql_config_path%>
回答7:
Other than making sure that only the libmysqlclient18
library was installed (and not 16), what made it work for me was installing libmysqlclient18-dev
(the dev headers).
This is with Percona Server 5.5 on Ubuntu Precise.
回答8:
I tried all the answers above and my final approach was fairly simple -- delete the entire bundled gem stack and reinstall everything. That finally got around the mysql client issue. i.e.
rm -rf /Users/sjohnson/.rvm/gems/ruby-1.9.3-p484@adp_rails3
bundle install
回答9:
if you know c program,you can remove this message. omit it.
open this mysql.gem mysql-2.9.1.gem\data.tar.gz\data.tar\ext\mysql_api\mysql.c
find "This gem was compiled for" ,delete this if sentence .
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); }
you need set sys-variable for local gemfile install on windows system . SET HOMEDRIVE=c:
ERROR: While executing gem ... (Errno::EINVAL) Invalid argument @ rb_file_s_stat - U:/
install local gem file . C:\Rails>gem install --local mysql-2.9.1.gem --install-dir=c:/tmp --platform= ruby -- --with-mysql-dir=C:/Rails/mysql-connector-c
mysql-connector-c visit mysql http://dev.mysql.com/downloads/connector/c/ . you don't care version.
try again.
require 'mysql'
回答10:
Make sure that /usr/bin/mysql_config
is indeed the one that came with 5.5.
回答11:
In my case, I had various files from libmysqlclient15 (dated 2009) and libmysqlclient16 (dated 20012) left in /usr/lib, possibly from a botched Ubuntu upgrade.
Removing the libmysqlclient15 files (which were linked to libmysqlclient15.so) solved my problem.
回答12:
On my machine I had to uninstall the gem, then re-direct the symlink /usr/local/mysql
to the correct Homebrew version:
ln -s /usr/local/bin/mysql /usr/local/mysql
Then run bundle install
.
回答13:
Reinstall libmysqlclient-dev with apt remove libmysqlclient-dev && apt install libmysqlclient-dev
fixed for me