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

Posted

技术标签:

【中文标题】mysql2 gem 为错误的 mysql 客户端库编译【英文标题】:mysql2 gem compiled for wrong mysql client library 【发布时间】:2012-02-03 04:20:35 【问题描述】:

当尝试通过我的 Rails 应用程序连接到 mysql 服务器时,我收到以下错误

D:/Program_Files/Ruby192/lib/ruby/site_ruby/1.9.1/rubygems/custom_require.rb:36:in `require': 
Incorrect MySQL client library version! This gem was compiled for 6.0.0 but the client library is 5.0.27. (RuntimeError)

我该如何纠正它?

【问题讨论】:

【参考方案1】:

如果您使用的是 64 位版本的 mysql 和 32 位版本的 ruby​​,请在 http://blog.mmediasys.com/2011/07/07/installing-mysql-on-windows-7-x64-and-using-ruby-with-it/ 上查看此解决方案

你基本上必须从mysql网站下载一个连接器,然后用你下载的连接器编译mysql或mysql2。

对于 Ruby 1.9.2:

gem install mysql --platform=ruby -- --with-mysql-dir=C:/mysql-connector-c-noinstall-6.0.2-win32

对于 Ruby 1.9.3:(显示 mysql2 变体)

gem pristine mysql2 -- --with-mysql-config=C:\mysql-connector-c-noinstall-6.0.2-win32    

注意在提取 MySQL Connector/C 的目录中使用正斜杠。

【讨论】:

【参考方案2】:

我和你有同样的问题,或者至少症状是一样的。

背景:我正在使用 Rails 3、mysql2 gem 和 MySQL 社区服务器版本 5.5.21(32 位)安装在我的 Windows 机器上。我从 MySQL 安装中获取客户端库 (libmysql.dll) 并将其复制到我的 ruby​​ 安装的 bin 文件夹中。

当我运行 bundle exec rake db:create 时,我收到了与您相同的错误消息,我想“嘿,当我从最新的 MySQL 版本中获取客户端库时,它怎么会过时?”

gem install mysql2 时会显示一条有用的消息。不幸的是,如果您使用 Bundler 安装 gem,Bundler 会吃掉消息。这里是:

=========================================================================
You've installed the binary version of mysql2. It was built using MySQL 
Connector/C version 6.0.2. It's recommended to use the exact same version
to avoid potential issues.

At the time of building this gem, the necessary DLL files where available
in the following download:

http://dev.mysql.com/get/Downloads/Connector-C/mysql-connector-c-noinstall-6.0.2-win32.zip/from/pick

And put lib\libmysql.dll file in your Ruby bin directory, for example
C:\Ruby\bin

按照这些说明为我解决了问题。

Referenced link

【讨论】:

这很重要,因为这是我反复遇到的问题,感谢您为我节省了一天的挫败感。 这对我有用,但下载位置已损坏。新的下载页面dev.mysql.com/downloads/connector/c。选择“Windows (x86, 32-bit), ZIP Archive” 这对我也有用。我运行 gem install mysql2,它给了我下载 libmysql.dll 的最新 url。谢谢 另外,请确保 MySQL 服务器、MySQL 连接器 c 和 mysql2 gem 在同一位平台(32/64 位)上【参考方案3】:

卸载并重新安装 gem 通常可以解决此问题,而无需手动下载和移动文件。从您的 rails 应用程序目录:

> gem uninstall mysql2

You have requested to uninstall the gem:
    mysql2-0.3.11
database_cleaner-0.9.1 depends on [mysql2 (>= 0)]
If you remove this gems, one or more dependencies will not be met.
Continue with Uninstall? [Yn]  Y
Successfully uninstalled mysql2-0.3.11

> bundle install

Fetching gem metadata from http://rubygems.org/......
Fetching gem metadata from http://rubygems.org/..
Using rake (0.9.2)
Using i18n (0.6.1)
... <SNIP> ...
Installing mysql2 (0.3.11) with native extensions
... <SNIP> ...
Your bundle is complete! Use `bundle show [gemname]` to see where a bundled gem is installed.

【讨论】:

这是解决此问题的最简单方法! 这很好用。我还要做:sudo bundle install for mysql 进行编译。 当我在 Mac OS Mavericks 上遇到类似错误时,这对我有用。谢谢! 如果您必须让 MySQL2 在 Windows 上运行,这将不起作用。如果可以通过Bundle正确安装,则不需要重新安装。 @glenatron 明白了。我只是想指出升级系统mysql后可能会出现同样的错误消息。在这种情况下,(有点违反直觉)卸载/重新安装就可以了。【参考方案4】:

我发现了导致此问题的完全不同的原因。我一直在使用 mysql gem。我构建了 mysql2 gem,但我忘记更新我的 database.yml。使用 mysql2 gem,它需要说:

  development:
    adapter: mysql2

而不是

  development:
    adapter: mysql

gem 已构建,但当我下次运行 rake 时出现错误。

一旦你看到它就很明显,但你会得到与这里讨论的相同的错误消息!

顺便说一句,在我的机器上构建 mysql2 gem 的命令比上面描述的要复杂一点:

gem install mysql2 -- --with-mysql-lib="c:\mysql-connector-c-noinstall-6.0.2-win32\lib"  --with-mysql-include="c:\mysql-connector-c-noinstall-6.0.2-win32\include" --with-mysql-dir="c:\mysql-connector-c-noinstall-6.0.2-win32"

【讨论】:

【参考方案5】:

我遇到了这样的问题:

Incorrect MySQL client library version! This gem was compiled for 5.5.29 but the client library is 5.6.17.

对我来说,问题是我的机器上安装了 5.5.29 和 5.6.17 这两个版本。我不知道怎么做。当我捆绑它时,它自动选择了 5.5.29 版本。我卸载了那个,然后重新安装了我的 gem,这解决了这个问题。

【讨论】:

【参考方案6】:

添加到现有答案。 (特别是windows平台)

Ruby 在这方面真的很烂。 Rails 实际上不应该关心连接器的版本或 mysql 版本。 -- 但这是我的看法。

为了让这个 **ing 工作,你需要 2 件事。 mysql2 gemlibmysql.dll 并且您需要根据版本匹配它们。 (这让我很困惑,因为我可以看到最新的连接器是 6.x 而 mysql 只有 5.x,我应该如何匹配它们

mysql2 宝石。当你安装它时,你需要指定连接器。

     gem install mysql2 --platform=ruby -- 
     --with-mysql-lib="d:\mysql\lib" --with-mysql-include="d:\mysql\include"

不需要从oracle下载连接器。你所需要的只是一个 mysql 安装和它下面的 lib include 文件夹。然后将libmysql.dll 放在railsinstaller bin 文件夹下。

如果它不能让你成功安装 mysql2 gem =>,那是因为我的 mysql 太旧了(为什么 ruby​​ 会关心这个)。所以我从 oracle 得到了一些最新的 mysql。在它下面使用libincludelibmysql.dll您实际上不需要升级数据库,您可以将其保存在某个地方,并在生成 2 个必需组件后继续使用它

我的案例:我用的是一个非常古老的mysql数据库,暂时不想升级。所以我备份了那个数据库并稍后恢复它

【讨论】:

【参考方案7】:

在我的 Windows 上,将 libmysql.dll 从 MySQL Server 5.5 目录错误地复制到 ruby​​200/bin。正确的是从 mysql-connector-c-noinstall-6.0.2-win32 复制 libmysql.dll。

【讨论】:

我认为这是相关的,但我有完全相反的经历。我不得不使用 MySQL Server 5.6 目录中的 libmysql.dll 版本,并且使用 MySQL Connector.C 6.1 中的一个(均由 mysql 安装程序安装)得到了这个错误。教训是使用正确的,你的 gem 是根据它构建的。【参考方案8】:

我遇到了同样的问题,我已经解决了以下问题:

1 ::通过以下链接下载压缩包:https://dev.mysql.com/downloads/connector/c/

2 ::解压项目“Provider”文件夹下的文件(libmysql.dll)。

3 :: 第一卷运行命令bundle install

准备好了,解决了!

https://dev.mysql.com/downloads/connector/c/

【讨论】:

你好,玉莲,我建议你尽量用英文回答,以获得更多的关注。 meta.stackexchange.com/questions/13676/…

以上是关于mysql2 gem 为错误的 mysql 客户端库编译的主要内容,如果未能解决你的问题,请参考以下文章

安装 mysql2 gem 错误

错误:安装 mysql2 时出错:错误:无法在 AWS Linux 上构建 gem 原生扩展

错误:安装 mysql2 时出错:错误:无法构建 gem 原生扩展

无法为 Rails 项目安装 mysql2 gem

如何在 Ubuntu 16.04 上安装 mysql2 [错误:安装 mysql2 时出错:错误:无法构建 gem 本机扩展。] [重复]

错误:无法构建 gem 本机扩展(rails 3.2.3 上的 mysql2)