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
先上个图,mysql 和 python 都是编译安装的,错误是这样的,这个很好搞定,Google 一下就会知道在 site.cfg 里面 threadsafe 设置为 False 就可以搞定的,但通常都会继续引发下面的问题2
问题 2. ld: connot find -lmysqlclient
嗯,长得几乎一样,区别就是少了一个 _r。Google 这个错误没有得到解决方案,好吧,查错过程。
首先当然是看系统里有没有这个库
嗯,就是我编译的这个没错,那又是为什么呢?其实看一下错误提示就很清楚了,报错的命令是 -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 上去…
原则上如果一个事情要重复三遍以上,就要考虑写个脚本吧~
- Posted in: 运维