1. 程式人生 > >python pymysql 無法登陸

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 指令碼,可以直接執行修改指令碼下載