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

时间:2011-11-15 19:27:30

标签: mysql ruby gem mysql2

使用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 `<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,通过apt-get卸载了所有与mysql相关的软件包并重新安装了所有内容,然后再次尝试使用mysql-config标志安装gem。但这一切都证明是徒劳的。错误仍然存​​在。

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

14 个答案:

答案 0 :(得分:12)

晚会,但我刚刚做了

gem uninstall mysql2
gem install mysql2

宝石路径是

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

答案 1 :(得分:8)

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

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

答案 2 :(得分:7)

我有这个问题,只需要重新编译宝石。我不知道是否有更多的编程方式与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

答案 3 :(得分:3)

我遇到了类似的问题:

  

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'不适合您,您可以尝试使用其他旧版本号。

答案 4 :(得分:1)

您可能还会检查系统的软件包列表,而不是移动库文件 - 如果您使用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.5库复制到5.1库上,而应该能够删除它:

$ sudo apt-get remove libmysqlclient16

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

答案 5 :(得分:1)

我再次遇到这个问题,我无法用我之前的方法解决它(使用旧版本的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%>

答案 6 :(得分:1)

除了确保只安装了libmysqlclient18库(而不是16)之外,让它适用于我的是安装libmysqlclient18-dev(开发标题)。

这是Ubuntu Precise上的Percona Server 5.5。

答案 7 :(得分:1)

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

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

答案 8 :(得分:1)

如果您了解c程序,则可以删除此消息。省略它。

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

  2. 找到“这个宝石被编译为”,删除这个句子。

    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); }
    
  3. 你需要在windows系统上为本地gemfile安装设置sys-variable。 SET HOMEDRIVE = c: 错误:执行gem时...(Errno :: EINVAL)无效参数@ rb_file_s_stat - U:/

    安装本地gem文件。 C:\ Rails&gt; 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'

答案 9 :(得分:1)

在使用Brew的Mac上,验证计算机上安装的版本:

ls /usr/local/Cellar/mysql*

他们删除了错误的版本,例如:

brew uninstall mysql-client

移除宝石:

gem uninstall mysql2

再次运行捆绑包:

bundle install

答案 10 :(得分:0)

确保/usr/bin/mysql_config确实是5.5附带的那个。

答案 11 :(得分:0)

在我的情况下,我在/ usr / lib中留下了来自libmysqlclient15(日期为2009年)和libmysqlclient16(日期为20012)的各种文件,可能是来自Ubuntu的破坏升级。

删除libmysqlclient15文件(链接到libmysqlclient15.so)解决了我的问题。

答案 12 :(得分:0)

在我的机器上,我必须卸载gem,然后将符号链接/usr/local/mysql重定向到正确的Homebrew版本:

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

然后运行bundle install

答案 13 :(得分:0)

重新安装libmysqlclient-dev并为我修复apt remove libmysqlclient-dev && apt install libmysqlclient-dev