Ruby mysql2 gem编译为错误的mysql客户端库版本

使用apt-get将MySQL更新到5.5后, mysql2 gem停止工作。

这是错误:

 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使用mysql-config编译mysql2但是仍然存在错误。

 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 `' 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 `' 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 `' from script/rails:6:in `require' from script/rails:6:in `' 

编辑 :我从缓存中删除了所有mysql2 gemspecs,通过apt-get卸载了所有与mysql相关的软件包并重新安装了所有内容,然后再次尝试使用mysql-config标志安装gem ..但这一切都certificate是徒劳的。 错误仍然存​​在。

编辑2 :正如John Bachir所建议的那样,我确认mysql_config包含MySQL 5.5版。

使用Ubuntu Server 11.04和Percona Server时遇到同样的错误,我做的是:

/usr/lib/libmysqlclient.so.16.0.0替换/usr/lib/libmysqlclient.so.18.0.0

晚了,但我刚刚做了

 gem uninstall mysql2 gem install mysql2 

gem路径是

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

我有这个问题,只需要重新编译gem。 我不知道是否有更多的编程方式与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客户端库版本不正确! 这个gem是为5.6.12编译的,但客户端库是5.5.28。

我在Mac上的MySQL版本:

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

并且bundle install的mysql2 gem是mysql2-0.3.13

我通过在Gemfile中将mysql2 gem设置为旧版本来解决这个问题:

 gem 'mysql2', '0.2.6' 

如果'0.2.6'不适合您,您可以尝试其他旧版本号。

您可能还会检查系统的软件包列表,而不是移动库文件 – 如果您使用apt-get升级到5.5,那么您可能仍然拥有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.1库复制5.5库,您应该能够删除它:

 $ sudo apt-get remove libmysqlclient16 

对我们来说,这比之前提出的库重命名解决方案更可靠。

我再次遇到这个问题,我无法用我之前的方法解决它(使用旧版本的mysql2 gem)。 所以我尝试了另一种方法,如下所示:

1.找出你的gem库所依赖的mysql_config。

mysql_config的情况在不同人的机器上有所不同,而一个人机器可以有几个mysql_config,所以没有标准的mysql_config路径供大家使用。 以此问题为例,mysql_config版本为“5.1.58”,因此您可以在root中搜索“mysql”文件,找到与“5.1.58”相关的文件:

 cd / sudo find -name "mysql" ./ 

2.再次使用特定的mysql_config路径在步骤1中找到mysql2 gem库

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

除了确保只安装了libmysqlclient18库(而不是16)之外,使其适用的是安装libmysqlclient18-dev (开发头文件)。

这是在Ubuntu Precise上的Percona Server 5.5。

我尝试了上面的所有答案,我的最终方法相当简单 – 删除整个捆绑的gem堆栈并重新安装所有内容。 最终解决了mysql客户端问题。 即

rm -rf /Users/sjohnson/.rvm/gems/ruby-1.9.3-p484@adp_rails3
捆绑安装

如果你知道c程序,你可以删除此消息。 省略它。

  1. 打开这个mysql.gem mysql-2.9.1.gem\data.tar.gz\data.tar\ext\mysql_api\mysql.c

  2. 找到“这个gem编译为”,如果句子删除这个。

     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); } 

你需要在windows系统上为本地gemfile安装设置sys-variable。 SET HOMEDRIVE = c:错误:执行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 -c 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.so)解决了我的问题。

在我的机器上我必须卸载gem,然后将symlink /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为我修复