木匣子

Web/Game/Programming/Life etc.

在 OSX 构建 MySQL-Python

LP 最近开始学数据库了,想要在 OSX 搭建一个 MySQL-Python 环境。

原本打算直接用 MAMP 加上 mysqldb for python,但是折腾了一下,发现 MySQLdb 没办法直接在 MAMP 的基础上完成 build,需要很长的前戏,这对妹子来说简直就是一场灾难。

MAMP 是一个 Mac+Apache+Mysql+Php 集成开发环境,最大的好处就是即装即用,而且自带了 phpMyAdmin,很适合刚入门 MySQL 的人使用。但是它的集成性太好了,没有给外部留太多的共享库。在构建 MySQLdb 的时候,会提示找不到各种头文件(.h)

$ python /path/to/mysqldb/setup.py build
blah blah blah...
_mysql.c:36:23: error: my_config.h: No such file or directory
blah blah blah...

难道要自行下载 mysql source 来编译么……
幸好还有一个很方便的工具 homebrew:

$ brew search mysql
automysqlbackup		   groonga-normalizer-mysql   mysql			 mysql++		    mysql-cluster	       mysql-connector-c	  mysql-connector-c++	     mysql-connector-odbc	mysql-proxy		   mysqlreport
josegonzalez/php/php53-mysqlnd_ms      josegonzalez/php/php54-mysqlnd_ms      josegonzalez/php/php55-mysqlnd_ms	     josegonzalez/php/php56-mysqlnd_ms	    homebrew/versions/mysql51		   homebrew/versions/mysql55

里面已经有一个编译好的 mysql 可以直接用了!手到擒来:

$ brew install mysql

待下载完成后,mysql 已经顺利安装到 OSX 上了,运行 mysql 服务器:

$ mysqld

以 root 身份连接 mysql:

$ mysql -u root

一切正常,现在可以构建 MySQLdb 了:

python /path/to/mysqldb/setup.py build
python /path/to/mysqldb/setup.py install

如果一切顺利的话 MySQLdb 已经安装到 python 库中了。可以使用$ python -c "import MySQLdb" 进行验证,如果没有报错,恭喜可以开工了。

FAQ

  • Mysql Error 2002: Can’t connect to local MySQL server through socket ‘/tmp/mysql.sock’ (2)

当客户端使用 host=‘localhost’ 登录 MAMP 的 mysql 时,会使用 unix_sock 进行我连接,但如果本地没有开启 mysqldb 则会报此错误;改成 host=‘127.0.0.1’ 走 TCP/IP 即可解决。

  • $ brew link mysql
    Linking /usr/local/Cellar/mysql/5.6.25…
    Error: Could not symlink share/man/man8/mysqld.8
    /usr/local/share/man/man8 is not writable.

brew link 失败的话,会导致 MySQLdb 不可用,应先根据上面的提示解决权限问题。