527

I am having some problems when trying to install mysql2 gem for Rails. When I try to install it by running bundle install or gem install mysql2 it gives me the following error:

Error installing mysql2: ERROR: Failed to build gem native extension.

How can I fix this and successfully install mysql2?

Ritesh Kumar
  • 2,183
  • 2
  • 20
  • 32
spacemonkey
  • 19,664
  • 14
  • 42
  • 62
  • In my case ruby 2.1 no error was shown but it freezed for several minutes. Spacemonkey answer fixed it. – Lucio Oct 04 '15 at 06:36

33 Answers33

974

On Ubuntu/Debian and other distributions using aptitude:

sudo apt-get install libmysql-ruby libmysqlclient-dev

Package libmysql-ruby has been phased out and replaced by ruby-mysql. This is where I found the solution.

If the above command doesn't work because libmysql-ruby cannot be found, the following should be sufficient:

sudo apt-get install libmysqlclient-dev

On Red Hat/CentOS and other distributions using yum:

sudo yum install mysql-devel

On Mac OS X with Homebrew:

brew install mysql
Dave Powers
  • 2,051
  • 2
  • 30
  • 34
spacemonkey
  • 19,664
  • 14
  • 42
  • 62
  • 5
    i have the same issue on windows 7..any ideas? the command above didnt work for me.. – femi Apr 01 '11 at 16:15
  • 40
    Hello, I'm using Ubuntu 12.04 with Ruby 1.9.3 and Rails 3.2.8 and in my case, installing `libmysqlclient-dev` was sufficient. – S.M.Mousavi Nov 10 '12 at 12:21
  • 2
    If you are using Mac OSX: update to the latest version of XCode and install the Development Tools. I had the same mysql install issue (even when using the --with-mysql-config=/usr/local/mysql/bin/mysql_config ) – Americo Savinon Mar 08 '13 at 21:32
  • On centos, I also had to do this: yum install mysql mysql-server – vish Jul 09 '13 at 05:10
  • I must admit it works. I'm on Xubuntu 13.04 (but pure kubuntu-desktop) and ruby-2.0.0-p247, and after copy-paste-run the command I could `gem install mysql2` successfully. I'm impressed. I had so much pain with that gem on Win XP, and managed to install it so easy on kubuntu. Why is it not as easy on Windows? – Green Jul 20 '13 at 02:03
  • Had the same problem, but `brew install mysql` wouldn't solve the issue. It still complained that some `mysql.h` file is missing. This answer solved it http://stackoverflow.com/a/17262871/723769 – Jona Aug 13 '13 at 19:06
  • 2
    Did not need libmysql-ruby since I had installed Ruby via RVM – Michael Lang Sep 05 '13 at 10:32
  • In case you are trying to install GitLab, you'll need only `libmysqlclient-dev`. – Andrey Rudenko Jan 16 '14 at 21:15
  • 2
    For windows try the Ticked answer from https://stackoverflow.com/questions/19014117/ruby-mysql2-gem-installation-on-windows-7/19023107#19023107 – nitigyan Jul 18 '14 at 10:28
  • I ran "brew install mysql", and I still getting the same error when running bundle install. Anybody can help me? – Ricardo Masao Shigeoka Nov 22 '14 at 00:03
  • "sudo apt-get install libmysqlclient-dev" worked for me. Thanks – Satya Kalluri Jun 08 '15 at 09:57
  • For Windows, There is a libmysqlcient.dll/libmysqlclient-dev.dll file in Mysql/lib folder. Copy that file and paste into where you installed your ruby i.e. Ruby1.9/lib Hope this will work – Anuj Sep 21 '15 at 07:34
  • On Amazon Linux 2022 Preview (which is based on Fedora 34), I had to install "mysql-community-devel" package. – Aleksey Tsalolikhin May 26 '22 at 23:51
66

I'm on a mac and use homebrew to install open source programs. I did have to install mac Dev tools in order to install homebrew, but after that it was a simple:

brew install mysql

to install mysql. I haven't had a mysql gem problem since.

Dave Powers
  • 2,051
  • 2
  • 30
  • 34
Kelsin
  • 823
  • 7
  • 7
39

For MacOS Mojave:

gem install mysql2 -v '0.5.2' -- --with-ldflags=-L/usr/local/opt/openssl/lib --with-cppflags=-I/usr/local/opt/openssl/include

Allen
  • 6,745
  • 5
  • 41
  • 59
39

here is a solution for the windows users, hope it helps!

Using MySQL with Rails 3 on Windows

  • Install railsinstaller -> www.railsinstaller.org (I installed it to c:\Rails)

  • Install MySQL (I used MySQL 5.5) -> dev.mysql.com/downloads/installer/

--- for mySQL installation ---

If you dont already have these two files installed you might need them to get your MySQL going

vcredist_x86.exe -> http://www.microsoft.com/download/en/details.aspx?id=5555 dotNetFx40_Full_x86_x64.exe -> http://www.microsoft.com/download/en/details.aspx?id=17718

Use default install Developer Machine

-MySQL Server Config-
port: 3306
windows service name: MySQL55
mysql root pass: root (you can change this later)
(username: root)
-MySQL Server Config-

--- for mySQL installation ---


--- Install the mysql2 Gem ---

Important: Do this with Git Bash Command Line(this was installed with railsinstaller) -> start/Git Bash

gem install mysql2 -- '--with-mysql-lib="c:\Program Files\MySQL\MySQL Server 5.5\lib" --with-mysql-include="c:\Program Files\MySQL\MySQL Server 5.5\include"'

Now the gem should have installed correctly

Lastly copy the libmysql.dll file from
C:\Program Files\MySQL\MySQL Server 5.5\lib
to
C:\Rails\Ruby1.9.2\bin

--- Install the mysql2 Gem ---


You will now be able to use your Rails app with MySQL, if you are not sure how to create a Rails 3 app with MySQL read on...


--- Get a Rails 3 app going with MySQL ---

Open command prompt(not Git Bash) -> start/cmd
Navigate to your folder (c:\Sites)
Create new rails app

rails new world

Delete the file c:\Sites\world\public\index.html
Edit the file c:\Sites\world\config\routes.rb
add this line -> root :to => 'cities#index'

Open command prompt (generate views and controllers)

rails generate scaffold city ID:integer Name:string CountryCode:string District:string Population:integer



Edit the file c:\Sites\world\app\models\city.rb to look like this

class City < ActiveRecord::Base
 set_table_name "city"
end

Edit the file c:\Sites\world\config\database.yml to look like this

development:
adapter: mysql2
encoding: utf8
database: world
pool: 5
username: root
password: root
socket: /tmp/mysql.sock

add to gemfile

gem 'mysql2'

Open command prompt windows cmd, not Git Bash(run your app!)
Navigate to your app folder (c:\Sites\world)

rails s

Open your browser here -> http://localhost:3000

--- Get a Rails 3 app going with MySQL ---

Francois
  • 10,465
  • 4
  • 53
  • 64
  • Thanks, the problem was that i used widnows PowerShell and not normal command prompt. now it's working :) – Danpe Aug 07 '12 at 16:38
  • the host must be 127.0.0.1, and if the password is number, it must be put in quote ex '123456' otherwise we can type normally ex admin123 – duykhoa Oct 30 '12 at 07:46
  • 3
    Using XAMPP: `gem install mysql2 -- --with-mysql-dir=C:\xampp\mysql` – Mifeng Jun 20 '14 at 10:00
  • Look at path --with-mysql-include: gem install mysql2 -- --platform=ruby --with-mysql-lib="d:\mariadb\lib" --with-mysql-include="d:\mariadb\include\mysql" – Ivan Nov 17 '14 at 12:48
  • @Mifeng worked great for me but i am using GitBash and needed `-- --with-mysql-dir="C:\xampp\mysql"` without the quotes my `\` were stripped. Thank you – O'Mutt Dec 26 '14 at 20:39
22

On Ubuntu(18.04)

i was able to solve this issue by running the following:

sudo apt-get install build-essential libmysqlclient-dev
gem install mysql2

reference

Irani
  • 1
  • 1
Paa Yaw
  • 431
  • 6
  • 8
20

Another way for MacOS users

If you used "brew" to install mysql:

gem install mysql2 -v 'x.x.x' -- --with-mysql-config=/usr/local/Cellar/mysql/y.y.y/bin/mysql_config

x.x.x = version of the mysql2 gem you want to install
y.y.y = the version of mysql you have installed ls /usr/local/Cellar/mysql to find it.

aruanoc
  • 817
  • 1
  • 7
  • 9
  • Tried ~10 answers from all sort of questions asked here... You solved it. Thanks :) – Stan Nov 25 '15 at 11:10
20

I have several computers, 32 and 64 bits processor, they run on Ubuntu Linux, Maverick (10.10) release.

I had the same problem, and for me, the sudo apt-get install libmysql-ruby libmysqlclient-dev did the job!!!

Dorian
  • 7,749
  • 4
  • 38
  • 57
OfficeYA
  • 737
  • 8
  • 15
7

Have you tried using

 gem install mysql -- --with-mysql-lib=/usr/lib/mysql/lib 

to specify the location of thebase directory as well as the path to the MySQL libraries that are necessary to complete the gem installation?

Sources: MySQL Gem Install ERROR: Failed to build gem native extension MySQL Forums :: Ruby :: Help needed with installing MySQL binding for Ruby

João Pereira
  • 3,545
  • 7
  • 44
  • 53
  • Worked great. I had to use a different path, which I found by calling `which mysql` and then finding the `lib` directory from there. – Joshua Pinter Oct 31 '17 at 04:20
7

If you are using yum try:

sudo yum install mysql-devel
Andrew Marshall
  • 95,083
  • 20
  • 220
  • 214
Mark Locklear
  • 5,044
  • 1
  • 51
  • 81
6

On Debian Stretch the package that worked for me was default-libmysqlclient-dev

sudo apt-get update && apt-get install -y default-libmysqlclient-dev

Ali
  • 7,297
  • 2
  • 19
  • 19
6

This solved my problem once in Windows:

subst X: "C:\Program files\MySQL\MySQL Server 5.5" 
gem install mysql2 -v 0.x.x --platform=ruby -- --with-mysql-dir=X: --with-mysql-lib=X:\lib\opt 
subst X: /D
Carlos Pardilla
  • 215
  • 3
  • 9
  • I was about to post the source but I see user Ritesh Kumar has already done so. So his merit, not mine. – Carlos Pardilla Aug 09 '11 at 01:56
  • 1
    If your lib does not have opt folder: `gem install mysql2 --platform=ruby -- --with-mysql-dir=X: --without-opt-dir` – Junior Mayhé Mar 21 '14 at 19:51
  • This worked for me (a whole decade later!). This is the full install command that worked for me `gem install mysql2 -v 0.3.11 --platform=ruby -- --with-mysql-lib=X: --without-opt-dir`. And using MySQL Server 8.0 – Mako212 Oct 06 '22 at 23:27
5

If you are still having trouble….

Try installing

   sudo apt-get install ruby1.9.1-dev
capu
  • 2,245
  • 1
  • 14
  • 11
5

In my case this helped:

$ export LDFLAGS="-L/usr/local/opt/openssl/lib"
$ export CPPFLAGS="-I/usr/local/opt/openssl/include"

Then:

gem install mysql2 -v '0.5.2' --source 'https://rubygems.org/' -- --with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib

Result:

Building native extensions with: '--with-cppflags=-I/usr/local/opt/openssl/include --with-ldflags=-L/usr/local/opt/openssl/lib'
This could take a while...
Successfully installed mysql2-0.5.2
Parsing documentation for mysql2-0.5.2
Installing ri documentation for mysql2-0.5.2
Done installing documentation for mysql2 after 0 seconds
1 gem installed

See this post (WARNING: Japanese language inside).

Aurelio
  • 24,702
  • 9
  • 60
  • 63
4

I had this issue on Windows 7. This is apparently an incompatibility issue and the solution is as follows:

Download the libmySQL.dll file from an older InstantRails installer. It is available from the InstantRails GitHub repo.

Next, copy that file into your Ruby/bin folder.

Now, you are good to go ;)

Dave Powers
  • 2,051
  • 2
  • 30
  • 34
santo101
  • 125
  • 1
  • 6
3

You have to Install some dependencies

sudo apt-get install libmysql-ruby libmysqlclient-dev
vipin
  • 2,374
  • 1
  • 19
  • 36
3

I got this error too. Solved by installing development packages. I'm using arch and it was:

sudo pacman -S base-devel

which installed:

m4, autoconf, automake, bison, fakeroot, flex, libmpc, ppl, cloog-ppl, elfutils, gcc,
libtool, make, patch, pkg-config

but I think it actually needed make and gcc. Error output said (on my machine, among other):

"You have to install development tools first."

So it was an obvious decision and it helped.

arty
  • 661
  • 5
  • 2
3

I can see most of the people have found the solution to this problem, this is mostly coused but not limited to missing packages, this happened to me after I have purged mysql and reinstalled it. I had to run this command in order to fix my problem:

sudo apt-get install libmysqlclient-dev

This command helped me fix my problem

Yonela Nuba
  • 133
  • 1
  • 10
2

I was running into this error on my mac and found that I needed to upgrade from mysql 32bit to mysql 64 bit to get this error to go away. I was running OSX 10.6 on an intel macbook pro with ruby 1.9.2 and rails3.0.0

I also needed to install xcode in order to get unix utilities like "make" that are required to compile the gem.

once this was done I was able to run gem install mysql and gem install mysql2 without error.

lofte
  • 864
  • 7
  • 6
1

For windows user: You set the lib and include path of your mysql, for instance, if youre using xampp you can have like this:

gem install mysql2 -- '--with-mysql-lib="C:\xampp\mysql\lib" --withmysql-include="C:\xampp\mysql\include"'
Arman Ortega
  • 3,003
  • 1
  • 30
  • 28
1

Solution only works on Mac OS X

If you've installed MySQL with homebrew, what worked for me was uninstalling MySQL, and installing MySQL Community Edition via the MySQL website (https://www.mysql.com/).

After installed, just re-enter the command to gem install mysql2 or if necessary, sudo gem install mysql2, if you are getting permission denied problems.

the12
  • 2,395
  • 5
  • 19
  • 37
1

I got the gem built on Mac OS X 10.6.6 by 1) Ensuring the Developer tools package is installed 2) Downloading the current MySQL package (5.5.8 in my case) from Source 3) Installing the cmake tool from cmake.org 4) Following the instructions in section 2.11 of INSTALL-SOURCE from the mysql distribution files 5) sudo gem install mysql2 -- --srcdir=/usr/local/mysql/include The gem built successfully, but there are two errors in the documentation that rdoc and ri complain about. But now when I try to require 'mysql2' I get a

LoadError: no such file to load -- mysql2/mysql2

I was hoping the error I would get was that the libmysqlclient.16.dylib couldn't be found because we figured that out in another post (search for install_name_tool).

My $PATH has /usr/local/mysql in it (that's where my source and built files are located), so I'm a little stumped. If anyone has any thoughts, I'll check back after a few hours of sleep.

tobinjim
  • 1,862
  • 2
  • 19
  • 31
1

According to https://github.com/brianmario/mysql2/issues/1175 , I fixed it by

gem install mysql2 -- \
 --with-mysql-lib=/usr/local/Cellar/mysql/8.0.26/lib \
 --with-mysql-dir=/usr/local/Cellar/mysql/8.0.26 \
 --with-mysql-config=/usr/local/Cellar/mysql/8.0.26/bin/mysql_config \
 --with-mysql-include=/usr/local/Cellar/mysql/8.0.26/include
Lane
  • 4,682
  • 1
  • 36
  • 20
0

download the right version of mysqllib.dll then copy it to ruby bin really works for me. Follow this link plases mysql2 gem compiled for wrong mysql client library

Community
  • 1
  • 1
Bruce
  • 107
  • 5
0

Got the "You have to install development tools first." error when trying to install the mysql2 gem after upgrading to Mac OS X Mountain Lion. Apparently doing this upgrade removes the command line compilers.

To fix:

  • I uninstalled my very old version of Xcode (ran the uninstall script in /Developer/Library). Then deleted the /Developer directory.
  • Went to the AppStore and downloaded Xcode.
  • Launched Xcode and went into the Preferences -> Downloads, and installed the command line tools.
Sunil D.
  • 17,983
  • 6
  • 53
  • 65
0

You are getting this problem because you have not install MySql. Before install mysql2 gem. Install MySQL. After that mysql2 gem will install.

Amrit Dhungana
  • 4,371
  • 5
  • 31
  • 36
0

I just wanted to add this answer specifically for Mac Users.

My server was running perfectly fine until I updated my xcode. The while starting my rails server the error was shown like this

Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

    /Users/user/.rvm/rubies/ruby-1.9.3-p448/bin/ruby extconf.rb --with-mysql-
    checking for rb_thread_blocking_region()... /Users/user/.rvm/rubies/ruby-1.9.3-  
    p448/lib/ruby/1.9.1/mkmf.rb:381:in `try_do': The compiler failed to generate an    
    executable file. (RuntimeError)

And there was suggestion to install mysql2 gem at the end of the error message. So when i tried installing it I got the error as above mentioned in this question. The error I got is as follows

ERROR:  Error installing mysql2:
ERROR: Failed to build gem native extension.

So as suggested in this post I tried 'brew install mysql' and that quitted saying that mysql version so and so already installed. But there was warning before it saying

Warning: You have not agreed to the Xcode license.
Builds will fail! Agree to the license by opening Xcode.app or running:
xcodebuild -license

Then I tried this sudo xcodebuild -license and type 'agree' at the end. You have to be root to agree to the license.

After this, I again tried bundle install and then everything is working fine as normal. [ Even due to this xcode updation, I had problem with my tower also.]

Sony Mathew
  • 2,929
  • 2
  • 22
  • 29
0

libmysql-ruby has been phased out and replaced. New command:

 sudo apt-get install ruby-mysql libmysqlclient-dev
Jerome
  • 5,583
  • 3
  • 33
  • 76
0

If still getting error then follow the steps of mysql2 gem installation on Rails 3 on -

http://rorguide.blogspot.com/2011/03/installing-mysql2-gem-on-ruby-192-and.html

where most of the user were able to install mysql2 gem.

Ritesh Kumar
  • 2,183
  • 2
  • 20
  • 32
0

Under ubuntu 20.04 LTS it's the only solution that have been working for me:

sudo apt-get install ruby-mysql2
Jean-Roch B.
  • 486
  • 4
  • 10
0

An updated solution for Windows users. I am running

Windows 10

MySql 8.0.30

Ruby 3.1.2

My Ruby version is the one from rubyinstaller.org with the MYSYS devkit included

I downloaded a MariaDB C connector library msi installer file v3.1.17, ran it and it installed the relevant files in a directory in Program Files. I copied that directory to another location, renamed it so that it didn't have any spaces and ran the command:

gem install mysql2 --platform=ruby -- --with-mysql-dir="c:/my-mariadb-connector-path-with-no-spaces"

This gave me a functioning gem.

This is a specific version of the library and not the most recent. Finding your way around the download options on the MariaDB website is a bit confusing, so here is the direct download link.

https://dlm.mariadb.com/2319542/Connectors/c/connector-c-3.1.17/mariadb-connector-c-3.1.17-win64.msi

Before I got to this point I'd tried several things which hadn't worked. I've included them below as background information, but if all you're interested in is a working solution then you can stop reading now.

A few sources suggest that if you have the MYSYS devkit installed you can build the gem with the following command:

ridk exec gem install mysql2 --platform=ruby -- --use-system-libraries

This did not compile for me.

You may also have seen a recommendation to download an archived version - 6.1 - of the MySQl connector library. I tried this, the gem compiled, but when I tried to start my app I got an error message: "Incorrect MySQL client library version! This gem was compiled for 6.1.11 but the client library is 10.5.5."

In MySQL V8 and above the C library is no longer an optional extra but is included in the main installation. I found the relevant files, copied them to a no spaces directory path and tried the usual command. Again the gem compiled but the app wouldn't start. This time the error message said that "This gem was compiled for 8.0.30 but the client library is 10.5.5"

I also tried the latest version of of the MariaDB library. With that the error message said that the gem was compiled for 10.6.8. You need the specific version described above, and yes, it really is a MariaDB library you need even if you're using "Original" MySql as distributed by the Oracle Corporation

John
  • 4,658
  • 2
  • 14
  • 23
0
  1. Download the connector C file from [here][1]. (https://downloads.mysql.com/archives/c-c/)

  2. Extract the file to a location, like C:\ror\mysqlC\mysql-connector-c-6.1.11-winx64\lib

  3. Use this template

gem install mysql2 -- '--with-mysql-lib="$lib_location" --with-mysql-include="$include_location"'

eg: My installed location is lib_location -> C:\ror\mysqlC\mysql-connector-c-6.1.11-winx64\lib

gem install mysql2 -- '--with-mysql-lib="C:\ror\mysqlC\mysql-connector-c-6.1.11-winx64\lib" --with-mysql-include="C:\ror\mysqlC\mysql-connector-c-6.1.11-winx64\include"'

Ramshad
  • 11
  • 2
0

For M1 with Ventura:

gem install mysql2 -v '0.5.3' -- --with-mysql-config=$(brew --prefix mysql)/bin/mysql_config --with-ldflags="-L$(brew --prefix zstd)/lib -L$(brew --prefix openssl)/lib" --with-cppflags=-I$(brew --prefix openssl)/include

Thanks to https://gist.github.com/fernandoaleman/385aad12a18fe50cf5fd1e988e76fd63

FreePender
  • 4,770
  • 2
  • 18
  • 15
0

After you get the mysql-dev issues corrected, you may need to remove the bad mysql2 install. Look carefully at the messages after $ bundle install. You may need to

rm -rf vendor/cache/
rm -rf ./Zentest

This will clear out the bad mysql2 installation so that a final $ bundle install can create a good one.

mmell
  • 2,448
  • 1
  • 24
  • 16