Python MySQLdb 导入libmysqlclient报错

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 摘要 flask开发相关功能,在本地测试没有问题,但是放到线上环境却报错 ImportError: libmysqlclient.so.16: cannot open shared object file: No such file or directory 检查了下发现在 /usr/lib64/mysql 下面存在libmysqlclient.so.18文件(

摘要

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 发现如下:

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

[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方式安装

## remove remi
yum remove php php-fpm php-mysqlnd php-common
## install from webstatic
yum install php56w php56w-mysql php56w-fpm php56w-common

最后验证导入 MySQLdb 没有报错,一切正常


附加:

上文中提到了 webtaticremi 两个不同的安装源,具体的区别可以参考链接

Centos下YUM安装PHP的两种方式 http://www.jianshu.com/p/2ff15676f902



公众号: DailyJobOps

    公众号: DailyJobOps    

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
WK
|
22天前
|
Python
如何在Python中导入包
在 Python 中,包是一种组织代码的方式,通过包含 `__init__.py` 文件(在 Python 3.3 及以上版本可选)的目录实现。包内可以包含多个模块(`.py` 文件)和其他子包。导入包有多种方式:整体导入包、导入特定模块、导入特定函数或类、导入子包等。推荐的做法是明确指定导入内容以提高代码的可读性和可维护性。此外,确保包目录结构正确,并将其添加到 Python 的搜索路径中。对于分发包,使用 setuptools 和 pip 等工具更为便捷。
WK
113 66
|
22天前
|
Python
像导入Python模块一样导入ipynb文件
像导入Python模块一样导入ipynb文件
|
22天前
|
Python
如何在 Python 中导入模块
【8月更文挑战第29天】
20 1
|
24天前
|
关系型数据库 MySQL 大数据
教你使用Python玩转MySQL数据库,大数据导入不再是难题!
教你使用Python玩转MySQL数据库,大数据导入不再是难题!
|
27天前
|
关系型数据库 MySQL Linux
【Azure 应用服务】[App Service For Linux(Function) ] Python ModuleNotFoundError: No module named 'MySQLdb'
【Azure 应用服务】[App Service For Linux(Function) ] Python ModuleNotFoundError: No module named 'MySQLdb'
|
2月前
|
关系型数据库 MySQL 数据库
使用Python读取xlsx表格数据并导入到MySQL数据库中时遇到的问题24
【7月更文挑战第24天】使用Python读取xlsx表格数据并导入到MySQL数据库中
55 7
|
2月前
|
Serverless 语音技术 开发工具
函数计算操作报错合集之怎么何集成nls tts python sdk
在使用函数计算服务(如阿里云函数计算)时,用户可能会遇到多种错误场景。以下是一些常见的操作报错及其可能的原因和解决方法,包括但不限于:1. 函数部署失败、2. 函数执行超时、3. 资源不足错误、4. 权限与访问错误、5. 依赖问题、6. 网络配置错误、7. 触发器配置错误、8. 日志与监控问题。
|
2月前
|
Python
Python中导入错误(ImportError)
【7月更文挑战第14天】
192 11
|
2月前
|
SQL 分布式计算 DataWorks
DataWorks操作报错合集之重新上传后只有SQL无法运行,而Python可以正常运行,是什么导致的
DataWorks是阿里云提供的一站式大数据开发与治理平台,支持数据集成、数据开发、数据服务、数据质量管理、数据安全管理等全流程数据处理。在使用DataWorks过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
|
2月前
|
IDE 开发工具 Python
python语法错误导入错误
【7月更文挑战第10天】
27 1