How to install MySQLdb (Python data access library to MySQL) on Mac OS X?

MacOS

Question or issue on macOS:

I’m a Python newbie, but I’ve just spent a day working out how to get MySQLdb working properly, and the universe according to google includes numerous references to what a PITA it is, and an inordinate number of guides that seem to be outdated. Given that this site is intended to address these sorts of problems, and I know that I’m going to need a reference to the solution in future, I’m going to ask the question, provide my answer and see what else floats to the surface.

So the question is how to get MySQLdb working on Mac OS X?

How to solve this problem?

Solution no. 1:

Update for those using Python3:
You can simply use conda install mysqlclient to install the libraries required to use MySQLdb as it currently exists. The following SO question was a helpful clue: Python 3 ImportError: No module named ‘ConfigParser’ . Installing mysqlclient will install mysqlclient, mysql-connector, and llvmdev (at least, it installed these 3 libraries on my machine).

Here is the tale of my rambling experience with this problem. Would love to see it edited or generalised if you have better experience of the issue… apply a bit of that SO magic.

Note: Comments in next paragraph applied to Snow Leopard, but not to Lion, which appears to require 64-bit MySQL

First off, the author (still?) of MySQLdb says here that one of the most pernicious problems is that OS X comes installed with a 32 bit version of Python, but most average joes (myself included) probably jump to install the 64 bit version of MySQL. Bad move… remove the 64 bit version if you have installed it (instructions on this fiddly task are available on SO here), then download and install the 32 bit version (package here)

There are numerous step-by-steps on how to build and install the MySQLdb libraries. They often have subtle differences. This seemed the most popular to me, and provided the working solution. I’ve reproduced it with a couple of edits below

Step 0:
Before I start, I assume that you have MySQL, Python, and GCC installed on the mac.

Step 1:
Download the latest MySQL for Python adapter from SourceForge.

Step 2:
Extract your downloaded package:

tar xzvf MySQL-python-1.2.2.tar.gz

Step 3:
Inside the folder, clean the package:

sudo python setup.py clean

COUPLE OF EXTRA STEPS, (from this comment)

Step 3b:
Remove everything under your MySQL-python-1.2.2/build/* directory — don’t trust the “python setup.py clean” to do it for you

Step 3c:
Remove the egg under Users/$USER/.python-eggs

Step 4:
Originally required editing _mysql.c, but is now NO LONGER NECESSARY. MySQLdb community seem to have fixed this bug now.

Step 5:
Create a symbolic link under lib to point to a sub-directory called mysql. This is where it looks for during compilation.

sudo ln -s /usr/local/mysql/lib /usr/local/mysql/lib/mysql

Step 6:
Edit the setup_posix.py and change the following

mysql_config.path = “mysql_config”

to

mysql_config.path = “/usr/local/mysql/bin/mysql_config”

Step 7:
In the same directory, rebuild your package (ignore the warnings that comes with it)

sudo python setup.py build

Step 8:
Install the package and you are done.

sudo python setup.py install

Step 9:
Test if it’s working. It works if you can import MySQLdb.

python

>>> import MySQLdb

Step 10:
If upon trying to import you receive an error complaining that Library not loaded: libmysqlclient.18.dylib ending with: Reason: image not found you need to create one additional symlink which is:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

You should then be able to import MySQLdb without any errors.

One final hiccup though is that if you start Python from the build directory you will get this error:

/Library/Python/2.5/site-packages/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg/_mysql.py:3: UserWarning: Module _mysql was already imported from /Library/Python/2.5/site-packages/MySQL_python-1.2.3c1-py2.5-macosx-10.5-i386.egg/_mysql.pyc, but XXXX/MySQL-python-1.2.3c1 is being added to sys.path

This is pretty easy to Google, but to save you the trouble you will end up here (or maybe not… not a particularly future-proof URL) and figure out that you need to cd .. out of build directory and the error should disappear.

As I wrote at the top, I’d love to see this answer generalised, as there are numerous other specific experiences of this horrible problem out there. Edit away, or provide your own, better answer.

Solution no. 2:

A quick and easy way for Mac OS X 10.8 (Mountain Lion), 10.9 (Mavericks), 10.10 (Yosemite), and 10.11 (El Capitan):

I assume you have XCode, its command line tools, Python, and MySQL installed.

  1. Install PIP:

    sudo easy_install pip 
  2. Edit ~/.profile: (Might not be necessary in Mac OS X 10.10)

    nano ~/.profile 

    Copy and paste the following two line

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

    Save and exit. Afterwords execute the following command:

    source ~/.profile 
  3. Install MySQLdb

    sudo pip install MySQL-python 

    To test if everything works fine just try

    python -c "import MySQLdb" 

It worked like a charm for me. I hope it helps.

If you encounter an error regarding a missing library: Library not loaded: libmysqlclient.18.dylib then you have to symlink it to /usr/lib like so:

sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib 

Solution no. 3:

Install mysql and python via Macports The porters have done all the difficult work.

sudo port install py26-mysql 
sudo port install mysql5-server

should install what you need. (see Stack overflow for comments re mysql server)

If you only need to connect to mysql and not run a server then the first line is sufficient.

Macports now (early 2013) will provide binary downloads for common combinations of OS a executable architecture, for others (and if you request it) it will build from source.

In general macports (or fink) help when there are complex libraries etc that need to be installed.

Python only code and if simple C dependencies can be set up via setuptools etc, but it begins to get complex if you mix the two.

Solution no. 4:

Install pip:

sudo easy_install pip

Install brew:

ruby -e "$(curl -fsSL https://raw.github.com/Homebrew/homebrew/go/install)"

Install mysql:

brew install mysql

Install MySQLdb

sudo pip install MySQL-python

If you have compilation problems, try editing the ~/.profile file like in one of the answers here.

Solution no. 5:

Here’s another step I had to go through, after receiving an error on completing Step 9:

ImportError: dlopen(/Users/rick/.python-eggs/MySQL_python-1.2.3-py2.6-macosx-10.6-universal.egg-tmp/_mysql.so, 2): Library not loaded: libmysqlclient.18.dylib

    sudo ln -s /usr/local/mysql/lib/libmysqlclient.18.dylib /usr/lib/libmysqlclient.18.dylib

Reference: Thanks! http://ageekstory.blogspot.com/2011_04_01_archive.html

Solution no. 6:

As stated on Installing MySQL-python on mac :

pip uninstall MySQL-python
brew install mysql
pip install MySQL-python

Then test it :

python -c "import MySQLdb"

Solution no. 7:

Just had this problem (again!) after getting a new Lion box.

Best solution I’ve found (still not 100% optimal, but working):

  • make sure you have 64-bit python. How to check if a library is 32bit/64bit built on Mac OS X?

  • install easy_install if you don’t have it. http://packages.python.org/distribute/easy_install.html

  • install GCC if you don’t have it.

you can get it by downloading XCode/Dev Tools from Apple – this is a big download –

… but instead I recommend this github which has what you need (and does not have XCode): https://github.com/kennethreitz/osx-gcc-installer

I downloaded their prebuilt PKG for lion, https://github.com/downloads/kennethreitz/osx-gcc-installer/GCC-10.7-v2.pkg

  • make sure you have downloaded a 64-BIT version of MYSQL Community. (The DMG install is an easy route) http://dev.mysql.com/downloads/mysql/

  • Set paths as follows:

    export PATH=$PATH:/usr/local/mysql-XXXX

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

    export ARCHFLAGS=’-arch x86_64′

NOTE THAT:


1 in mysql-XXXX above, XXX is the specific version you downloaded. (Probably /usr/local/mysql/ would also work since this is most likely an alias to the same, but I won’t pretend to know your setup)
2 I have seen it suggested that ARCHFLAGS be set to ‘-arch i386 -arch x86_64’ but specifying only x86_64 seemed to work better for me. (I can think of some reasons for this but they are not strictly relevant).

  • Install the beast!

    easy_install MySQL-python

  • LAST STEP:

Permanently add the DYLD_LIBRARY_PATH!

You can add it to your bash_profile or similar.
This was the missing step for me, without which my system continued to insist on various errors finding _mysql.so and so on.

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

@richard-boardman, just noticed your soft link solution, which may in effect be doing the same thing my PATH solution does…folks, whatever works best for you.

Best reference:
http://activeintelligence.org/blog/archive/mysql-python-aka-mysqldb-on-osx-lion/

Solution no. 8:

You could try using the pure-python pymysql:

sudo easy_install pymysql 

(Or use pip if you have it installed.) Then, add this before you import MySQLdb in your code:

try: import pymysql pymysql.install_as_MySQLdb() except ImportError: pass 

Solution no. 9:

Or simple try:

> sudo easy_install MySQL-python 

If it gives a error like below:


EnvironmentError: mysql_config not found

, then just run this

> export PATH=$PATH:/usr/local/mysql/bin 

Solution no. 10:

If you are using 64 bit MySQL, using ARCHFLAGS to specify your cpu architecture while building mysql-python libraries would do the trick:

ARCHFLAGS='-arch x86_64' python setup.py build ARCHFLAGS='-arch x86_64' python setup.py install 

Hope this helps!