Ruby mysql2 gem compiled for wrong mysql client library version

22,371

Solution 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

Solution 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

Solution 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

Solution 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.

Solution 5

On Mac using Brew verify the versions installed on your machine:

ls /usr/local/Cellar/mysql*

Them remove the wrong version such as:

brew uninstall mysql-client

Remove the gem:

gem uninstall mysql2

Run bundle again:

bundle install
Share:
22,371
Marco
Author by

Marco

Updated on July 05, 2022

Comments

  • Marco
    Marco almost 2 years

    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.

  • Marco
    Marco over 12 years
    Good suggestion. Unfortunately I checked and it does indeed have the correct version number in it.
  • Marco
    Marco over 12 years
    I have, as well as the cached gemspec files and vendor/cache and anything else I could find remotely related to the gem. I even uninstalled the libmysqlclient files, as well as the gem, before reinstalling everything but to no avail.
  • John Bachir
    John Bachir over 12 years
    Switch to Postgres. (just kidding)
  • Marco
    Marco over 12 years
    Do you have a file called libmysqlclient_r.so.18? I replaced all the libmysqlclient.so.16 files with the "18" version, but I don't have a corresponding "18" file for /usr/lib/libmysqlclient_r.so.16 so maybe that's the culprit.
  • ShiningRay
    ShiningRay over 12 years
    @Marco in my system, libmysqlclient_r is a symbol link to libmysqlclient
  • ShiningRay
    ShiningRay over 12 years
    @Marco The actual file is libmysqlclient.so.16.0.0, the other files like libmysqlclient.so.16, libmysqlclient.so are all symbol links.
  • johnf
    johnf over 12 years
    While this will fix this particular problem, I would be extremely weary solving it in this manner. This is probably going to break other bits of software that were actually compiled against version 16. I would suggest apt-cache purge libmysqlclient16 if it doesn't remove anything you don't need.
  • Marco
    Marco over 12 years
    @johnf can't do that, the mysql packages are dependent on it.. see pastie: pastie.org/2921551
  • hipertracker
    hipertracker about 12 years
    But "apt-get remove libmysqlclient16" will also remove MySQL server! Debian/Ubuntu has stupid dependencies here. I installed mariadb 5.5 server and client. Ubuntu 11.10 server installed both libmysqlclient16 (for MySQL 5.1) and libmysqlclient18 (for MySQL 5.5). That's because mariadb-client-5.5 depends on libdbd-mysql-perl. And libdbd-mysql-perl depends on libmysqlclient16. So finally: mysql client 5.5 depends on... mysql client 5.1 which is insane and confusing and it does not allow for installation of Ruby mysql2 gem.
  • drKreso
    drKreso about 10 years
    Installing with right config file worked for me. On OSX it is in /usr/local/mysql-version. Full path and command was sudo gem install mysql2 -- --with-mysql-config=/usr/local/mysql-5.5.27-osx10.6-x86_64/b‌​in/mysql_config. As discussed also here: ruby-forum.com/topic/1440086
  • François Drolet
    François Drolet almost 10 years
  • Shahzad Tariq
    Shahzad Tariq about 9 years
    Thanks, it worked fine for me on ruby 2.0.0 and rails 4 application. Error produced probably due to updated version of mysql server.
  • Tiago Franco
    Tiago Franco over 7 years
    Didn't work, as the Gem was not compiled again. After MySQL client is upgraded, the gem needs to be compiled against the new libraries.