Centos 编译安装 MySQL-python

这次标题党了,这次不是写安装过程的,前几天配置新环境,把编译的问题记录一下,应该是很全的编译 mysql + python 的问题了,妈妈以后再也不用担心我在 centos 上编译 python 和 mysql。

MySQL 现在四分五裂的,服务器上跑的是 percona-server。我打算去搞 PostgreSQL 了,在搞熟悉之前就先用这个了,看各方面的评价都不错~

说问题之前先说几个注意事项吧。

注意1. 编译 MySQL 之后 mysqlclient.so 处理

通常的做法都是在 /usr/lib64 或 /usr/local/lib64 下面设置软链接,这里对有系统洁癖者提供两种其它选择

1. 设置 LD_LIBRARY_PATH 添加 MySQL 的 lib 目录,直接贴代码了

if [[ -z "$LD_LIBRARY_PATH" ]]; then
  export LD_LIBRARY_PATH=$MYSQL_INSTALL_PATH/lib
else
  export LD_LIBRARY_PATH=$MYSQL_INSTALL_PATH/lib:$LD_LIBRARY_PATH
fi

2. 在 /etc/ld.so.conf 中添加 MySQL 的 lib 目录,之后 ldconfig 就可以了

注意2. MySQL-python 里 site.cfg 配置 mysql_config 的 path

这个好像没什么好说的。。

在上面两个过程处理之后,编译还是会出问题的 = =|||

问题 1. ld: connot find -lmysqlclient_r

mysqlclient_r先上个图,mysql 和 python 都是编译安装的,错误是这样的,这个很好搞定,Google 一下就会知道在 site.cfg 里面 threadsafe 设置为 False 就可以搞定的,但通常都会继续引发下面的问题2

问题 2. ld: connot find -lmysqlclient

mysqlclient嗯,长得几乎一样,区别就是少了一个 _r。Google 这个错误没有得到解决方案,好吧,查错过程。

首先当然是看系统里有没有这个库
ldconfig_grep_mysql嗯,就是我编译的这个没错,那又是为什么呢?其实看一下错误提示就很清楚了,报错的命令是 -L/opt/usr/mysql/lib/mysql ,等下,最后一个 mysql 是哪里来的,我的 lib 目录明明是 /opt/usr/mysql/lib ,看了下 mysql_config 的输出,也是我的 lib 目录,那就是 MySQL-python 不知道哪里的代码搞的鬼了,懒得去查,就在 mysql/lib/mysql 下面加了一个 libmysqlclient.so 的软链接

ln -s /opt/usr/mysql/lib/libmysqlclient.so.18.1.0 /opt/usr/mysql/lib/mysql/libmysqlclient.so

再重新编译问题就解决了。

说明快那时迟,被这个东西浪费了一个多小时的时间,唉。

最近在把所有的这些配置脚本用 ansible 重写,等写好了丢到 github 上去…

原则上如果一个事情要重复三遍以上,就要考虑写个脚本吧~