Python2.7+PyMySQL0.10.1连接AWS RDS MySQL8.0失败,求解决方案
解决Python 2.7 + PyMySQL 0.10.1连接MySQL 8.0的问题
你的错误核心是PyMySQL旧版本与MySQL 8.0默认认证插件不兼容,结合Python 2.7的环境限制,以下是可行的解决办法:
1. 修改数据库用户的认证插件
MySQL 8.0默认使用caching_sha2_password认证插件,而PyMySQL 0.10.1对该插件支持不佳。需将Python应用对应的数据库用户切换为兼容的mysql_native_password插件:
ALTER USER 'your_trac_db_user'@'%' IDENTIFIED WITH mysql_native_password BY 'your_user_password'; FLUSH PRIVILEGES;
替换your_trac_db_user、%(若为特定IP限制则改为对应IP)和your_user_password为实际值。
2. 显式指定连接参数
在PyMySQL的连接代码或Trac配置中,强制指定字符集和认证插件,避免自动协商时出现异常:
import pymysql # 直接使用PyMySQL连接的示例 conn = pymysql.connect( host='your_rds_hostname', user='your_trac_db_user', password='your_user_password', database='your_trac_db_name', charset='utf8', auth_plugin='mysql_native_password', connect_timeout=10 # 增加超时时间,解决0秒超时问题 )
如果是Trac配置文件,在[database]段修改连接字符串:
database = mysql://user:pass@host/db?charset=utf8&auth_plugin=mysql_native_password
3. 调整RDS参数组(可选)
若后续有新建用户需求,可修改RDS参数组,将default_authentication_plugin设置为mysql_native_password,让新用户默认使用兼容认证方式。修改后需重启RDS实例生效。
4. 验证字符集配置
连接成功后执行以下SQL确认字符集配置:
SHOW VARIABLES LIKE '%character_set%'; SHOW VARIABLES LIKE '%collation%';
确保所有相关参数为utf8或utf8_unicode_ci,避免隐性字符集问题。
内容的提问来源于stack exchange,提问作者EmRa
相关产品推荐
相关产品推荐

