iT邦幫忙

0

python MySQL無法連線

程式碼如下
db = pymysql.connect(host = "127.0.0.1",port = 3306 ,user= "root", passwd="test123",db='test', charset='utf8' )
cursor = db.cursor()
cursor.execute("SELECT VERSION()")
data = cursor.fetchone()
print (data)
db.close()

不過每次執行都會出現這樣的ERROR
pymysql.err.OperationalError: (2003, "Can't connect to MySQL server on 'localhost' ([Errno 111] Connection refused)")

在Workbench上連線是成功的
https://ithelp.ithome.com.tw/upload/images/20181121/20112952i67wGKPjtr.png

在電腦上執行也可以連上去
https://ithelp.ithome.com.tw/upload/images/20181121/20112952ne7O2lZ48y.png

不過在放上應用去連的時候就會一直產生錯誤,也不太清楚問題出在哪裡,希望有人能夠幫忙回答,謝謝

看更多先前的討論...收起先前的討論...
要不要改用實體IP 試試
小魚 iT邦大師 1 級 ‧ 2018-11-21 19:18:43 檢舉
mysql的使用者設定有設定好嗎?
rino3390 iT邦新手 5 級 ‧ 2018-11-21 22:28:05 檢舉
改用實體IP之後可以連了,只是變成逾時的問題...我再看看怎麼處理orz...

使用者有設定好,權限也都是開的
不曉得是不是driver還沒支援MySQL8.0

1 個回答

0
kjfang
iT邦新手 5 級 ‧ 2019-07-14 22:55:59

現在才看到這個問題,
解決了嗎?

首先,pymysql連結本機時,一般我用"localhost"
您用 "127.0.0.1"應該也可以
不過,這應該不是報錯的主因
建議您先用 SELECT user, host FROM mysql.user;
查一下,您有幾個 root
通常會有兩個:root@127.0.0.1 與 root@localhost
我習慣會刪掉一個(root@127.0.0.1),若您兩個都有
那就應該沒問題。

其次,無法登入MySQL 8.0,或登入逾時的問題
主要應該是MySQL 8.0的密碼認證方式改為caching_sha2_password
所以,改一下要連結帳號的密碼認證方式為mysql_native_password就可以了
以您的例子,
在 mysql> 下,輸入:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'test123';

ALTER USER 'root'@'127.0.0.1' IDENTIFIED WITH mysql_native_password BY 'test123';
應該就可以了
您也可以在 my.cnf 裡面加入下面這一行
default_authentication_plugin=mysql_native_password
不過,這只對新開的帳號有效
既有的帳號還是要用 ALTER 指令修改。

kjfang iT邦新手 5 級 ‧ 2019-07-14 23:12:57 檢舉

我要發表回答

立即登入回答