Ubuntu 20.04下Python用mysql.connector连接MySQL报错如何解决
Ubuntu 20.04 下Python连接MySQL报错的排查解决步骤
报错原因说明
- 第一个
Authentication plugin 'caching_sha2_password' is not supported报错是因为MySQL 8.0默认使用caching_sha2_password作为认证插件,你使用的mysql-connector版本不支持该插件,添加auth_plugin='mysql_native_password'的修改方向是正确的。 - 后续的
Access denied for user 'root'@'localhost'报错是因为MySQL root用户未配置mysql_native_password对应的密码,或本地登录权限未正确配置。
具体解决步骤
1. 登录MySQL终端修改用户配置
Ubuntu 20.04默认安装的MySQL支持sudo免密码登录root用户,执行以下命令进入MySQL shell:
sudo mysql -u root
执行SQL查看root用户当前的认证插件配置:
SELECT user, host, plugin FROM mysql.user WHERE user='root';
如果返回结果中plugin字段不是mysql_native_password,继续执行以下修改命令。
2. 调整root用户认证方式与密码
执行SQL修改root用户的认证插件,同时设置登录密码,将命令中的你的实际root密码替换为你自己要设置的密码:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '你的实际root密码';
如果你代码中host参数写的是127.0.0.1,额外执行以下命令:
ALTER USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY '你的实际root密码';
刷新权限让配置生效:
FLUSH PRIVILEGES;
执行exit退出MySQL shell。
3. 测试本地密码登录
执行以下命令验证密码配置是否生效,输入刚才设置的密码后能正常登录即为配置成功:
mysql -u root -p
4. 修正Python连接代码
注意password字段要和你在MySQL中设置的root密码完全一致,不要有多余空格或者拼写错误
import mysql.connector cnx = mysql.connector.connect( user = 'root', password = '你的实际root密码', host = 'localhost', database = 'mydb', auth_plugin='mysql_native_password' ) cnx.close()
额外排查点
如果修改后仍报错,检查以下内容:
- 确认
mydb数据库已经存在,不存在的话先登录MySQL执行CREATE DATABASE mydb;创建 - 确认root用户有访问mydb的权限,登录MySQL执行
GRANT ALL PRIVILEGES ON mydb.* TO 'root'@'localhost';,之后执行FLUSH PRIVILEGES;刷新权限 - 升级mysql连接器到最新版本,执行
pip install --upgrade mysql-connector-python
内容的提问来源于stack exchange,提问作者Javad Besharati
相关产品推荐
相关产品推荐

