Python程序插入MySQL数据时caching_sha2_password认证不支持问题咨询
解决MySQL认证插件
caching_sha2_password不支持的问题 嘿,这个问题我之前帮不少开发者踩过坑,咱们直接说根因和解决方案:
问题本质
MySQL 8.0及以后的版本,默认把caching_sha2_password设为了用户认证的默认插件——这是个更安全的认证方式,但旧版本的mysql-connector-python(比如2.1.x及更早)确实不支持这个插件,这就是你报错的核心原因。你说修改密码类型不允许,大概率是命令没写对,不是MySQL不让改。
三种解决方案,按推荐优先级排序:
1. 升级mysql-connector-python到最新版本(最推荐)
这是最省心的方案,新版的MySQL Python驱动已经完全支持caching_sha2_password认证,不需要改任何MySQL配置。直接在终端执行:
pip install --upgrade mysql-connector-python
升级完成后,再运行你的插入数据代码,应该就能正常连接了。
2. 修改MySQL用户的认证插件为mysql_native_password
如果你暂时不想升级驱动,或者有其他依赖限制,可以把目标用户的认证方式改成旧版的mysql_native_password:
- 先用root或有管理员权限的用户登录MySQL服务器;
- 执行以下SQL命令(替换成你的用户名、主机和密码):
ALTER USER '你的用户名'@'你的主机' IDENTIFIED WITH mysql_native_password BY '你的密码';
比如你的用户是testuser,允许本地连接,密码是123456,命令就是:
ALTER USER 'testuser'@'localhost' IDENTIFIED WITH mysql_native_password BY '123456';
- 最后刷新权限生效:
FLUSH PRIVILEGES;
3. 连接时手动指定认证插件(临时测试用)
如果升级驱动后还是有兼容性问题,或者只是临时调试,可以在Python的连接配置里强制指定使用mysql_native_password插件:
import mysql.connector from mysql.connector import Error try: conn = mysql.connector.connect( host='localhost', database='你的数据库名', user='你的用户名', password='你的密码', auth_plugin='mysql_native_password' # 手动指定认证插件 ) if conn.is_connected(): print("成功连接到MySQL") # 这里写你的插入数据代码 cursor = conn.cursor() insert_query = "INSERT INTO your_table (col1, col2) VALUES (%s, %s)" data = ("值1", "值2") cursor.execute(insert_query, data) conn.commit() print("数据插入成功") except Error as e: print(f"连接或操作出错:{e}") finally: if conn.is_connected(): cursor.close() conn.close() print("连接已关闭")
小提醒
caching_sha2_password是MySQL官方推荐的安全认证方式,所以优先建议用方案1升级驱动,尽量不要长期依赖mysql_native_password。
内容的提问来源于stack exchange,提问作者adam Wadsworth
相关产品推荐
相关产品推荐

