企业🤖AI智能体构建引擎,智能编排和调试,一键部署,支持私有化部署方案 广告
摘要 > flask开发相关功能,在本地测试没有问题,但是放到线上环境却报错 `ImportError: libmysqlclient.so.16: cannot open shared object file: No such file or directory` > 检查了下发现在 `/usr/lib64/mysql` 下面存在`libmysqlclient.so.18`文件(uanme -a 确认是64位系统) --- ## 解决过程 发现问题,不是自己遇到的也没有解决办法,那就网上查呗,发现大家的思路: + copy `/usr/lib64/mysql/libmysqlcient.so.18 `到`/usr/lib64/libmysqlclient.so.16` + 在`/usr/lib64/`下面建立libmysqlclient.so.16的软连接 + 在`/etc/ld.so.conf.d/mysql-x86_64.conf`里面添加 /usr/lib64/mysql 等等思路都尝试之后发现还是还是没有解决。 继续思考: 环境中明明有`libmysqlclient.so.18` 为何要去找`libmysqlclient.so.16`, 那就先考虑`libmysqlclient.so.18`是从和而来。 在报错中提到了`_mysql.so` , locate 找到`_mysql.so` 发现是在`/root/.pyenv/versions/flask2/lib/python2.7/site-packages/_mysql.so`,好项目有什么问题,找`mysql.so` 发现如下: ```bash root@pts/1 # locate mysql.so /root/.pyenv/versions/2.7.12/envs/flask2/lib/python2.7/site-packages/_mysql.so /usr/lib64/php/modules/mysql.so /usr/lib64/php/modules/pdo_mysql.so /usr/lib64/php-zts/modules/mysql.so /usr/lib64/php-zts/modules/pdo_mysql.so /var/lib/mysql/mysql.sock ``` 猜想应该和和PHP有关系,想起来本地环境和线上环境安装的PHP不一致 本地的PHP是通过 `webtatic` 安装的,而服务器上面的是通过 `remi`安装的, 在本地执行`yum list |grep libmysql`: ```bash [root@i-bskmtj6q ~]# yum list |grep libmysql libmysqlclient16.x86_64 5.1.69-1.w6 webtatic libmysqlclient16-devel.x86_64 5.1.69-1.w6 webtatic ``` 发现libmysqlclient16 是来自于 `webstatic`, 故卸载之前通过remi安装的PHP,采用webstatic方式安装 ```bash ## remove remi yum remove php php-fpm php-mysqlnd php-common ## install from webstatic yum install php56w php56w-mysql php56w-fpm php56w-common ``` 最后验证导入 MySQLdb 没有报错,一切正常 --- ## 附加: 上文中提到了 `webtatic` 和 `remi` 两个不同的安装源,具体的区别可以参考链接 Centos下YUM安装PHP的两种方式 [http://www.jianshu.com/p/2ff15676f902](http://www.jianshu.com/p/2ff15676f902) --- ----------------------------------------------***更多精彩请关注***------------------------------------- ![公众号: DailyJobOps](http://upload-images.jianshu.io/upload_images/1394001-cb23ed39087edab0.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/200)