python pymysql 无法登陆

环境

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) 错误

  1. 查看一下 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

  2. 步骤是在 shell 命令行连接 mysql:
    mysql -u root -pyouassword

  3. 然后输入:
    update mysql.user set authentication_string=PASSWORD('youpassword'),plugin='mysql_native_password' where user='root';

  4. 更新:
    flush privileges;

  5. 重启 mysql 服务:
    systemctl restart mysql
    这时再跑下 python 脚本就可以连接了。

我还写了一个 .sh 脚本,可以直接运行修改脚本下载

猜你喜欢

转载自blog.csdn.net/weixin_41474364/article/details/83894993