python pymysql 無法登陸
阿新 • • 發佈:2018-11-21
環境
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 的 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 指令碼,可以直接執行修改指令碼下載