12

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

这是错误:

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 版。

4

14 回答 14

12

派对迟到了,但我刚刚做到了

gem uninstall mysql2
gem install mysql2

宝石之路是

$ bundle show mysql2
/var/lib/gems/1.9.1/gems/mysql2-0.3.16
于 2014-08-02T04:46:54.387 回答
8

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

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

于 2011-11-22T06:55:44.617 回答
7

我遇到了这个问题,只需要重新编译 gem。我不知道捆绑器是否有更程序化的方式,但我只是删除了已编译的 gem,然后重新运行捆绑器:

$ 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
于 2013-10-16T08:58:30.347 回答
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

而安装的mysql2 gembundle install是mysql2-0.3.13

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

gem 'mysql2', '0.2.6'

如果'0.2.6'不适合您,您可以尝试另一个旧版本号。

于 2013-08-06T03:30:06.370 回答
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.1 库上复制 5.5 库,您应该能够将其删除:

$ sudo apt-get remove libmysqlclient16

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

于 2012-04-13T21:50:49.150 回答
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.使用步骤1中找到的特定mysql_config路径再次安装mysql2 gem库

gem install mysql2 -- --with-mysql-config=<%your_specific_mysql_config_path%>
于 2013-09-12T05:03:32.400 回答
1

除了确保只libmysqlclient18安装了库(而不是 16 个)之外,让它对我有用libmysqlclient18-dev的是安装(开发头文件)。

这是 Ubuntu Precise 上的 Percona Server 5.5。

于 2013-10-09T11:08:03.503 回答
1

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

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

于 2015-04-03T18:52:31.640 回答
1

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

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

  2. 找到“This gem was compiled for”,删除这个 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); }
    

您需要为 Windows 系统上的本地 gemfile 安装设置 sys-variable 。SET HOMEDRIVE=c: ERROR: While execution gem ... (Errno::EINVAL) Invalid argument @ 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'

于 2016-05-31T02:22:13.413 回答
1

在 Mac 上使用 Brew 验证您机器上安装的版本:

ls /usr/local/Cellar/mysql*

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

brew uninstall mysql-client

移除宝石:

gem uninstall mysql2

再次运行捆绑:

bundle install
于 2019-09-12T02:33:19.000 回答
0

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

于 2011-11-16T05:04:02.157 回答
0

就我而言,我有来自 libmysqlclient15(2009 年)和 libmysqlclient16(20012 年)的各种文件留在 /usr/lib 中,可能来自一个拙劣的 Ubuntu 升级。

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

于 2014-03-02T21:00:19.190 回答
0

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

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

然后运行bundle install

于 2015-06-16T08:59:25.393 回答
0

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

于 2017-08-08T09:12:21.023 回答