使用MySQLdb连接远程MySQL 5.5.33遇mysql_old_password认证错误求助
解决MySQLdb连接时"mysql_old_password"插件找不到的问题
这个错误是因为你的MySQL用户testuser使用了旧版的mysql_old_password认证插件,而当前环境的MySQL客户端/驱动限制了该插件的使用。以下是可行的解决办法:
方法1:更新数据库用户的认证方式(推荐)
登录到远程MySQL 5.5.33服务器(使用具有权限的账号,如root),执行以下步骤:
- 查看目标用户的当前认证插件:
SELECT user, host, plugin FROM mysql.user WHERE user = 'testuser';
- 如果结果中
plugin字段为mysql_old_password,执行命令更新用户密码并切换到mysql_native_password插件:
-- 替换'%'为实际的客户端IP或允许的主机范围,比如你的本地IP SET PASSWORD FOR 'testuser'@'%' = PASSWORD('test2025'); FLUSH PRIVILEGES;
或者通过更新用户表的方式(适用于MySQL 5.5):
UPDATE mysql.user SET password = PASSWORD('test2025'), plugin = 'mysql_native_password' WHERE user = 'testuser' AND host = '%'; FLUSH PRIVILEGES;
方法2:调整MySQL服务器配置(若允许修改)
如果服务器上有多个旧插件用户需要兼容,可以修改MySQL的配置文件(通常是my.cnf或my.ini):
- 找到
old_passwords配置项,将其值改为0(MySQL 5.5中默认可能为1):
old_passwords = 0
- 重启MySQL服务,之后新创建的用户会默认使用
mysql_native_password插件,但已存在的旧用户仍需按方法1手动更新。
验证连接
修改完成后,重新运行你的Python代码:
import MySQLdb try: mydb = MySQLdb.connect( host = "test.corp.com", user = "testuser", passwd = "test2025", db = "testingdb" ) print("Database connection successful.") except MySQLdb.Error as err: print(err)
内容的提问来源于stack exchange,提问作者Madhan
相关产品推荐
相关产品推荐

