环境
server:
Distributor ID: Ubuntu
Description: Ubuntu 18.04.1 LTS
Release: 18.04
Codename: bionic
报错
pymysql.err.InternalError: (1698, "Access denied for user 'root'@'localhost'")
(1698这个错误可以创建一个用户并且授权解决,如果解决不了再用下面的解决方法)
或者pymysql.err.OperationalError: (1045, "Access denied for user 'root'@'localhost' (using password: NO)")
解决方法
注意:以下解决方法是,python pymysql 连接 mysql 不成功,而在 shell 中可以登录,所以不需要用安全模式进入 mysql,需要安全模式的解决办法请可以参考:MySQL ERROR 1698 (28000) 错误
-
查看一下 user 表:
select user,plugin from mysql.user;
输出:+-----------+-----------------------+ | user | plugin | +-----------+-----------------------+ | root | auth_socket | | mysql.sys | mysql_native_password | | dev | mysql_native_password | +-----------+-----------------------+ 3 rows in set (0.01 sec)
root 的 plugin 被修改成了
auth_socket
,用密码登录的 plugin 应该换成mysql_native_password
。 -
步骤是在 shell 命令行连接 mysql:
mysql -u root -pyouassword
-
然后输入:
update mysql.user set authentication_string=PASSWORD('youpassword'),plugin='mysql_native_password' where user='root';
-
更新:
flush privileges;
-
重启 mysql 服务:
systemctl restart mysql
这时再跑下 python 脚本就可以连接了。
我还写了一个 .sh 脚本,可以直接运行修改脚本下载