A recent opportunity made me dust off my development skills and I decided to use Ruby on Rails as the framework of choice.

I’m happy with Ruby 1.8.7 for now (comes with Mac OS X Snow Leopard), but I had to update Rails to version 3, which was a painless process. After installing MySQL 5.5.10 (dumping MAMP for now), I installed the ruby gem for MySQL:

$ sudo gem install mysql2

You may want to run this too, although the first one should do the trick:

$ sudo gem install mysql

A quick test got me this piece of error:

LoadError: dlopen(/Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle, 9): Library not loaded: libmysqlclient.18.dylib
Referenced from: /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
Reason: image not found – /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
from /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle
from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:31:in `require’
from /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2.rb:7
from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:36:in `gem_original_require’
from /Library/Ruby/Site/1.8/rubygems/custom_require.rb:36:in `require’
from (irb):1

You can never have a perfect installation experience. Can you?

A thread on Stack Overflow guided me to this solution:

$ sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql-5.5.10-osx10.6-x86_64/lib/libmysqlclient.18.dylib /Library/Ruby/Gems/1.8/gems/mysql2-0.2.6/lib/mysql2/mysql2.bundle

Note: As it happened with me, you might have the same problem that MySQL failed to create a link (alias) in the /usr/bin folder. You can fix it with a quick ln command:

$ sudo ln /usr/local/mysql-5.5.10-osx10.6-x86_64/bin/mysql /usr/bin/mysql

PS: This solution is based on the latest versions of the libraries available as of March 2011. You might need to change the versions in the commands or paths according to your machine settings.

  1. Richard
    Mar 25, 2011

    Thank you so much for this. It was the exact answer that I needed. I appreciate you taking the time to write this.

  2. Aditya
    Mar 28, 2011

    The recent fix being sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql/lib/libmysqlclient.18.dylib /Library/Ruby/Gems/1.8/gems/mysql2-0.2.7/lib/mysql2/mysql2.bundle and also one has to update to mysql2 gem version 0.27 with ‘sudo gem install mysql2’ before trying it out. Cheers!

  3. Rick D
    Mar 30, 2011

    That one with the recent fix worked. Thanks Aditya.

  4. Dani Carvalho
    Apr 14, 2011

    The command worked fine for me too. Thank you Aditya.

  5. Josh
    Apr 15, 2011

    Thanks so much for this page!! I have spent more hours then I won’t to admit on this. Thank you Aditya

  6. leonel
    Apr 17, 2011

    Hi.

    When are you going make it work with MAMP ‘MAMP Pro’ am interest on it.

    Thank you

  7. Ali
    Apr 17, 2011

    Thanks for the updated version Aditya.

  8. Ali
    Apr 17, 2011

    I haven’t tried it myself, but I believe if you just replace the path to MySQL library file (libmysqlclient) with the one installed with MAMP, it should work (of course, while MAMP is running).
    There is also a guide I just found that I hope fixes your issue: http://ow.ly/4C8RY (haven’t tested it myself)

  9. Martin
    Apr 18, 2011

    better fix for the load error is to set the systems path for finding dynamic libraries. i.e. put:
    export DYLD_LIBRARY_PATH=”/usr/local/mysql/lib:$DYLD_LIBRARY_PATH”
    in your ~/.bash_profile
    this works for all references to libmysqlclient.18.dylib, not just the one in (one) ruby if you use rvm and several rubies

  10. Hays
    May 19, 2011

    OMG that was annoying… here is the latest:

    sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql-5.5.12-osx10.6-x86_64/lib/libmysqlclient.18.dylib /Library/Ruby/Gems/1.8/gems/mysql2-0.2.7/lib/mysql2/mysql2.bundle

  11. Jordan
    Jun 18, 2011

    This worked great for me too for mysql2 version 0.2.7

    thanks for the post!

  12. Gideon Jadlovker
    Jul 24, 2011

    Thanks so much. not sure why rails is looking for mysql 0.2.11 (while 0.3.6 is out)

    here my version (including the RVM directories)

    sudo install_name_tool -change libmysqlclient.18.dylib /usr/local/mysql-5.5.14-osx10.6-x86_64/lib/libmysqlclient.18.dylib /Users/GidApple/.rvm/gems/ruby-1.9.2-p290/gems/mysql2-0.2.11/lib/mysql2/mysql2.bundle

    sudo ln /usr/local/mysql-5.5.14-osx10.6-x86_64/bin/mysql /usr/bin/mysql

  13. Ritesh Kumar
    Aug 02, 2011

    Thanks, I was using command “export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH” when I found soft link command “sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib” which solved my problem.

    Ritesh Kumar
    http://rorguide.blogspot.com/2011/07/getting-error-library-not-loaded.html

  14. Douglas Dorô
    Aug 29, 2011

    Thanks man!

  15. Zack Hovatter
    Dec 10, 2011

    Thanks for posting the fix.

  16. Dr. Spock
    Feb 27, 2012

    Another solution to the error is:

    export DYLD_LIBRARY_PATH=/usr/local/mysql/lib:$DYLD_LIBRARY_PATH

  17. Dave Peters
    Oct 03, 2012

    In the world of Mountain Lion, and particularly in the context of setuid/sudo execution where DYLD_LIBRARY_PATH is ignored, the install_name_tool invocation is particularly useful. Many thanks.