mysql2 gem fails to compile with MySQL 5.6.12 on OS X with Homebrew

24,358

Solution 1

I had the same problem, I managed to fix it. I did a lot of things, and I don't know for sure what it was, but going to MySQL 5.6.10 seems to have worked.

Uninstall MySQL 5.6.12:

brew unlink mysql
brew uninstall mysql

Go to the homebrew directory:

cd /usr/local

Go to version 5.6.10 (you can find a list of versions by running brew versions mysql:

git checkout 48f7e86 Library/Formula/mysql.rb

Then install mysql again:

brew install mysql

And now gem install mysql2 works for me.

I've also installed mysql from source (brew install mysql --build-from-source), but that didn't solve it, but might be part of the solution.

Solution 2

just ;)

gem install mysql2 -- --with-mysql-config=/usr/local/Cellar/mysql/5.6.10/bin/mysql_config

Solution 3

This also seemed to work for me. It forces the gem to compile against 5.6.10.

bundle config build.mysql2 --with-mysql-config=/usr/local/Cellar/mysql/5.6.10/bin/mysql_config

Related answer: https://stackoverflow.com/a/9360181

Solution 4

The top answer here is out-of-date... the brewers have fixed mysql:

brew update
brew upgrade mysql
gem install mysql2

This will update mysql to the latest version, which seems to work fine with the mysql2 gem on OSX.

Solution 5

I had to specify the ldflags and cppflags for it to compile correctly, like this:

gem install mysql2 -v '0.5.2' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include
Share:
24,358
pupeno
Author by

pupeno

You can find my blog at https://pupeno.com where I publish about coding and other stuff.

Updated on November 06, 2020

Comments

  • pupeno
    pupeno over 3 years

    I updated all the packages I installed with Homebrew. MySQL got upgraded to 5.6.12 (from 5.5.27 or so):

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

    and now the mysql2 gem doesn't compile anymore:

    $ gem install mysql2
    Building native extensions.  This could take a while...
    ERROR:  Error installing mysql2:
        ERROR: Failed to build gem native extension.
    
            /Users/pupeno/.rvm/rubies/ruby-1.9.3-p429-perf/bin/ruby extconf.rb
    checking for rb_thread_blocking_region()... yes
    checking for rb_wait_for_single_fd()... yes
    checking for mysql.h... no
    checking for mysql/mysql.h... no
    -----
    mysql.h is missing.  please check your installation of mysql and try again.
    -----
    *** extconf.rb failed ***
    Could not create Makefile due to some reason, probably lack of
    necessary libraries and/or headers.  Check the mkmf.log file for more
    details.  You may need configuration options.
    
    Provided configuration options:
        --with-opt-dir
        --with-opt-include
        --without-opt-include=${opt-dir}/include
        --with-opt-lib
        --without-opt-lib=${opt-dir}/lib
        --with-make-prog
        --without-make-prog
        --srcdir=.
        --curdir
        --ruby=/Users/pupeno/.rvm/rubies/ruby-1.9.3-p429-perf/bin/ruby
        --with-mysql-config
        --without-mysql-config
    

    The file mysql.h is present in /usr/local/Cellar/mysql/5.6.12/include/mysql.h. Any ideas what's going on?

    The file mysql.h doesn't appear in /usr/local because the symlink seems to go deeper than it should:

    $ ls -la /usr/local/include/mysql
    lrwxr-xr-x  1 pupeno  admin  36 21 Jun 15:18 /usr/local/include/mysql@ -> ../Cellar/mysql/5.6.12/include/mysql
    

    instead of

    /usr/local/Cellar/mysql/5.6.12/include
    

    Having said that, I manually fixed the symlink and the compilation still failed. So I'm stuck.

  • B. Ruschill
    B. Ruschill almost 11 years
    iain's answer solved it for me. In homebrew 0.9.4 (not sure about other versions) you can use brew pin mysql after downgrading to 5.6.10, and that will prevent it from getting upgraded if you use brew upgrade regularly.
  • Jan
    Jan almost 11 years
    This will only work if there actually is a mysql 5.6.10 installed at that path.
  • sborsje
    sborsje almost 11 years
    Works like a charm! :)
  • stockli
    stockli over 10 years
    If you do a brew uninstall does that dump your datadir? I wasn't sure, so in my case I used brew switch to change back to my old mysql version I already had installed, as the upgrade to the latest version wasn't critical for me.
  • Zachary Abresch
    Zachary Abresch over 10 years
    Worked like a charm! Thanks mate.
  • Chris Bloom
    Chris Bloom over 9 years
    Worked great! Just need to make sure the path points to the version of MySQL that's installed. (In my case, I needed to compile against 5.1)
  • Yuki Matsukura
    Yuki Matsukura over 9 years
    This rewrites ~/.bundle/config.
  • subelsky
    subelsky over 4 years
    this was the only thing that worked for me in Jan 2020; note that the flags he indicates are listed when you run "brew info [email protected]"
  • spume
    spume about 4 years
    This was the only thing that worked for me too, possibly since upgrading to openssl 1.1 gem install mysql2 -v '0.5.3' --source 'https://rubygems.org/' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include
  • jmoon90
    jmoon90 almost 4 years
    this solved my ld: library not found for -lssl clang: error: linker command failed with exit code 1 (use -v to see invocation) mysql2 error