在linux下安装MySQLdb模块

在linux下安装MySQLdb模块

在linux下安装MySQLdb还是有一些问题的,稍不注意可能就会老报错。这里我做一些简单的介绍。
首先,去下载MySQLdb的源码包,这里有: https://sourceforge.net/project/showfiles.php?group_id=22307

这里下的是 MySQL-python-1.2.2.tar.gz
下载完了后,解压缩

tar zxf MySQL-python-1.2.2.tar.gz

之后会产生一个叫 MySQL-python-1.2.2 的目录,进去。
这里就要做一些配置了,往往问题就在这个地方。
要想编译这个模块,就必须要先安装开发版的mysql,这里不说mysql怎么安装,假设装好了,并且装到/opt/mysql下。
这个目录下有一个叫 site.cfg 的文件,我们要修改的设置就在这里面,它的内容如下:

[options]
# embedded: link against the embedded server library
# threadsafe: use the threadsafe client
# static: link against a static library (probably required for embedded)

embedded = False
threadsafe = True
static = False

# The path to mysql_config.
# Only use this if mysql_config is not on your PATH, or you have some weird
# setup that requires it.
#mysql_config = /usr/local/bin/mysql_config

# The Windows registry key for MySQL.
# This has to be set for Windows builds to work.
# Only change this if you have a different version.
registry_key = SOFTWARE\MySQL AB\MySQL Server 5.0

以#开头的是注释,这里可能需要修改的有两个,一个是mysql_config,一个是threadsafe。往往编译不过就是这两个造成的。
mysql_config是指定mysql_config这个文件的路径,一般在mysql安装路径下,这里mysql装到/opt/mysql,因此取消mysql_config这行的注释,修改为
mysql_config=/opt/mysql/bin/mysql_config
一般来说这样就可以编译了。但是,如果在编译到最后时,报告链接不上libmysqlclient_r.so的话,还需要把threadsafe设置为False。

需要注意的就这两个。
二、安装python的mysql支持模块MySqlDb
Python程序连接数据库时,需要导入 MySQLdb 这个module。
以下是安装步骤:

下载MySQLdb,展开之后,运行
python setup.py build
进行编译

这一步可能出现许多问题,常见的有

fatal: library -lmysqlclient_r: not found

这是因为当前平台上没有thread-safe library造成的。
解决办法是,在site.cfg文件中设置:
threadsafe = False

mysql.h: No such file or directory
这是因为找不到mysql.h这个文件,一般来说,文件都存放在mysql安装目录的include目录下。
解决办法是,在site.cfg中指定mysql的路径。

另外需要注意的是,在编译时,一定要保证mysql安装目录中/bin目录下的文件都在PATH中,否则无法编译通过。

接下来执行
python setup.py install
安装完成。

比较诡异的是,有时即使安装完成,在python中执行
import MySQLdb
仍然可能出错:
libmysqlclient.so.12: cannot open shared object file: No such file or directory 

遇到这种问题,需要在/usr/lib/下为libmysqlclient.so.12设置一个符号链接(这里假设mysql安装在/usr/local/mysql下)
ln -s /usr/lib/mysql/lib/libmysqlclient.so /usr/lib/libmysqlclient.so.12
再次执行
import MySQLdb
成功。
三、安装python的mysql支持模块MySqlDb

今天在服务器上安装python的mysql支持模块MySqlDb的时候遇到了一点问题.

查阅了一些资料以后发现几点..

在解压后需要修改site.cfg文件

mysql_config = /opt/mysql/bin/mysql_config
如果在编译到最后时,报告链接不上libmysqlclient_r.so的话,还需要把threadsafe设置为False。
threadsafe=False
python setup.py build
python setup.py install
这样就搞定了
#python
>>> import MySQLdb
Traceback (most recent call last):
File "<stdin>", line 1, in ?
File "build/bdist.linux-i686/egg/MySQLdb/__init__.py", line 19, in ?
File "build/bdist.linux-i686/egg/_mysql.py", line 7, in ?
File "build/bdist.linux-i686/egg/_mysql.py", line 6, in __bootstrap__
ImportError: libmysqlclient.so.15: cannot open shared object file: No such file or directory
又出现如上提示错误.解决方法如下
两种方法:
1. 把~/mysql50/lib/mysql加到LD_LIBRARY_PATH环境变量中(注意把~变成绝对路径)
[code]export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/path/to/mysql50/lib/mysql[/code]
2. 将建链接到/usr/lib
[code]cd /usr/lib
ln -s /path/to/mysql50/lib/mysql/libmysqlclient_r.so.15.0.0 libmysqlclient_r.so.15
ln -s /path/to/mysql50/lib/mysql/libmysqlclient_r.so.15.0.0 libmysqlclient_r.so
ln -s /path/to/mysql50/lib/mysql/libmysqlclient_r.so.15.0.0 libmysqlclient.so.15
ln -s /path/to/mysql50/lib/mysql/libmysqlclient_r.so.15.0.0 libmysqlclient.so[/code]
四、安装MySQL-python-1.2.0 安装
首先需要mysql的原码包我用的是mysql-5.0.22
解压开MySQL-python-1.2.0.tar.gz
cd MySQL-python-1.2.0
vi _mysql.c
修改include
#include "structmember.h" #include "/root/mysql-5.0.22/include/mysql.h" #include "/root/mysql-5.0.22/include/mysqld_error.h" #include "/root/mysql-5.0.22/include/errmsg.h"
然后修改setup.py
mysqlclient = os.getenv('mysqlclient', 'mysqlclient')
export mysqlversion="5.0.22" export mysqlclient="mysqlclient_r" export mysqloptlibs="ssl crypto" export mysqlclient="mysqlclient"
setup.py 会调用mysql_conf
cp /usr/local/mysql/bin/mysql_config /bin/
cp /usr/local/mysql/bin/mysql /bin/
python setup.py build
python setup.py install
安装完成以后的放在
/usr/local/lib/python2.4/site-packages/MySQLdb/constants
展开阅读全文

没有更多推荐了,返回首页