CentOS 7 安装 MySQL 和 mysqlclient 遇到的坑与解决方案
在 CentOS 7 环境下部署 Python 项目时,经常需要安装 MySQL 数据库以及对应的 Python 客户端库 mysqlclient。但实际安装过程中会遇到各种依赖缺失、版本冲突的问题,本文整理了常见坑点和对应的解决方法,帮助开发者快速完成环境配置。
一、安装 MySQL 时的常见问题
1. 默认源无 MySQL 安装包
CentOS 7 默认的 yum 源中不包含 MySQL 官方包,直接执行 yum install mysql 会安装 MariaDB,如果需要原生 MySQL 需要先添加官方源。
添加 MySQL 8.0 官方 yum 源的步骤:
下载对应版本的 rpm 包:
wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
安装 rpm 包并刷新缓存:
rpm -ivh mysql80-community-release-el7-7.noarch.rpm yum clean all yum makecache
安装 MySQL 服务端:
yum install mysql-community-server
2. 启动 MySQL 失败
安装完成后执行 systemctl start mysqld 启动服务失败,常见原因是原有 MariaDB 残留文件冲突,或者权限不足。
解决方法:
移除原有 MariaDB 相关包:
yum remove mariadb-libs检查 /var/lib/mysql 目录权限,确保属于 mysql 用户:
chown -R mysql:mysql /var/lib/mysql重新初始化 MySQL:
mysqld --initialize-insecure --user=mysql
3. 获取初始 root 密码失败
MySQL 8.0 安装后默认会在 /var/log/mysqld.log 中生成初始 root 密码,但部分场景下日志中无密码信息,导致无法登录。
解决方法:修改配置文件跳过密码验证,重置密码后再恢复配置:
# 编辑配置文件 vim /etc/my.cnf # 在 [mysqld] 下添加一行 skip-grant-tables # 重启服务 systemctl restart mysqld # 无密码登录 mysql -u root # 重置密码 ALTER USER 'root'@'localhost' IDENTIFIED BY 'NewPass@123'; # 退出后删除配置文件中的 skip-grant-tables,再重启服务即可
二、安装 mysqlclient 时的常见问题
1. 缺少 mysql-devel 依赖
执行 pip install mysqlclient 时提示 mysql_config not found 错误,是因为系统没有安装 MySQL 开发依赖包。
解决方法:安装 mysql-devel 包,注意版本要和已安装的 MySQL 版本匹配:
yum install mysql-devel
如果是 MySQL 8.0 版本,对应的开发包名称为 mysql-community-devel,也可以通过 yum 直接安装:
yum install mysql-community-devel
2. Python 开发依赖缺失
安装过程中提示 Python.h: No such file or directory,是因为系统没有安装 Python 开发头文件。
解决方法:根据使用的 Python 版本安装对应开发包:
Python 2:
yum install python-develPython 3:
yum install python3-devel
3. GCC 编译失败
mysqlclient 安装时需要编译 C 扩展,若系统没有安装 GCC 编译器会直接报错。
解决方法:安装 GCC 及编译工具链:
yum groupinstall "Development Tools"
三、完整安装流程示例
以下是 CentOS 7 下完整安装 MySQL 8.0 和 mysqlclient 的正确流程,可避免多数常见问题:
# 1. 移除原有 MariaDB 包
yum remove mariadb-libs -y
# 2. 添加 MySQL 官方源
wget https://dev.mysql.com/get/mysql80-community-release-el7-7.noarch.rpm
rpm -ivh mysql80-community-release-el7-7.noarch.rpm
# 3. 安装 MySQL 服务端和开发依赖
yum install mysql-community-server mysql-community-devel -y
# 4. 启动 MySQL 并设置开机自启
systemctl start mysqld
systemctl enable mysqld
# 5. 获取初始密码并修改
initial_pass=$(grep 'temporary password' /var/log/mysqld.log | awk '{print $NF}')
mysql -u root -p"$initial_pass" --connect-expired-password -e "ALTER USER 'root'@'localhost' IDENTIFIED BY 'MyNewPass@123';"
# 6. 安装 Python 开发依赖和编译工具
yum install python3-devel gcc -y
# 7. 安装 mysqlclient
pip3 install mysqlclient四、验证安装结果
安装完成后可通过以下方式验证是否正常可用:
验证 MySQL 服务状态:
systemctl status mysqld,显示 active (running) 即为正常验证 mysqlclient 是否安装成功:进入 Python 交互环境执行以下代码,无报错则安装正常
import MySQLdb
conn = MySQLdb.connect(
host='127.0.0.1',
user='root',
passwd='MyNewPass@123',
db='mysql'
)
cursor = conn.cursor()
cursor.execute('SELECT VERSION()')
print(cursor.fetchone())
conn.close()五、注意事项
MySQL 8.0 默认使用 caching_sha2_password 认证插件,若旧版本 Python 客户端连接失败,可将用户认证方式修改为 mysql_native_password:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'MyNewPass@123';
另外,若项目中使用虚拟环境,需要确保在虚拟环境内安装 mysqlclient,且虚拟环境使用的 Python 版本和系统安装的 python3-devel 版本一致,避免出现兼容性问题。
CentOS7安装MySQL mysqlclient安装问题 MySQL8.0部署 Python连接MySQL Linux数据库配置