簡體   English   中英

通過python連接mysql數據庫時出現連接錯誤

[英]Connection Error while connecting the mysql database through python

我正在嘗試使用下面提到的 python 代碼連接 Mysql 服務器

import mysql.connector

mydb = mysql.connector.connect(
    host = "127.0.0.1",
    port = 5000,
    user = "user id",
    password = "password"
    )

print(mydb)

但是在運行此代碼以測試我是否已連接到 MySQL 時,我遇到了我無法理解的錯誤。

Traceback (most recent call last):
  File "C:\Users\varul.jain\Desktop\Test Phase\Mysql\mydb_test.py", line 7, in <module>
    password = "root"
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\__init__.py", line 179, in connect
    return MySQLConnection(*args, **kwargs)
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\connection.py", line 95, in __init__
    self.connect(**kwargs)
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\abstracts.py", line 716, in connect
    self._open_connection()
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\connection.py", line 210, in _open_connection
    self._ssl)
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\connection.py", line 142, in _do_auth
    auth_plugin=self._auth_plugin)
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\protocol.py", line 102, in make_auth
    auth_data, ssl_enabled)
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\protocol.py", line 58, in _auth_response
    auth = get_auth_plugin(auth_plugin)(
  File "C:\Users\varul.jain\AppData\Local\Programs\Python\Python36\lib\site-packages\mysql\connector\authentication.py", line 191, in get_auth_plugin
    "Authentication plugin '{0}' is not supported".format(plugin_name))
mysql.connector.errors.NotSupportedError: Authentication plugin 'caching_sha2_password' is not supported

注意:我已將默認值初始化為 5000

出於測試目的,我已經初始化了端口 5000,用戶 - root 和密碼 - root

但是根據上述錯誤授權默認密碼不可用

有什么方法可以檢查用戶 ID 和密碼以在 python 代碼中進行交叉驗證和更新嗎?

建議會有所幫助

按着這些次序:

  1. 您必須安裝 MySQL 服務器 ( https://dev.mysql.com/downloads/installer/ )

從此安裝 MySQL 服務器。

  1. 安裝mysql-connector-python (在你的 python 環境中)
  2. 使用此代碼:

    打開數據庫連接

    導入 mysql.connector

    mydb = mysql.connector.connect(host="127.0.0.1", port="3306", user="root", password="root", auth_plugin="mysql_native_password")

    打印(mydb)

根據 python 庫的 SQL 文檔。你需要指定 auth 插件如下:-

conn = mysql.connector.connect(user='root', password='password', host='127.0.0.1',port=5000, database='test', auth_plugin='mysql_native_password')
print(conn)

我在使用 webmin + python3 的 centOS VPS 上遇到了類似的問題。

起初我認為可能是由於 connection package ,所以我嘗試了:

  1. 'python3 -m pip install mysql-connector' ,在 python 中它將使用 'import mysql.connector'

  2. 'pip3 install PyMySQL' ,在python中使用'import PyMySQL'

兩者都不能解決問題。 然后我從一個網站上找到了其他幾種連接方法(現在我不記得它的地址了),詳細解釋了每種方法的優點和缺點,根據它,我最終選擇使用mysqlclient。

  1. 'sudo pip3 install mysqlclient' ,我使用它是因為它更通用並且支持python3。

以上都沒有解決我的問題,我仍然面臨連接錯誤。

我嘗試了幾次隨機測試,不小心使用了 root 和配置文件中的 skip-grant-tables 選項,我能夠使用 SSH python 代碼登錄 mysql,但這不是原因,因為普通的新創建的用戶仍然不能無論我在代碼中訪問什么主機,localhost,127.0.0.1,域,...。

所以我撤銷了跳過授權表選項因為沒有保護是有風險的(僅用於測試)。

最近,默認情況下 MySQL 服務器中已經存在用戶“root”,我發現它有 4 個條目,所以我嘗試在 webmin -> 服務器 -> MySQL 服務器 -> 用戶權限中創建 4 個單獨的類似條目記錄。

這些記錄具有相同的用戶名和較少的權限,但分配的主機內容相似。 它們是 'local' 、 '127.0.0.1' 、 'myservername.vps.provider.ca' 、 '::1'

(不知道最后一個是什么意思)

而且,Bingo,在添加了以上 4 個條目后,新用戶可以使用通過 python3 代碼提供的密碼 authenthicate 登錄。

(記住第一次,你必須在MySQL Server頁面中設置MySQL Admin 'root'密碼,這樣密碼登錄認證功能才會起作用,並且該密碼不需要與系統的root密碼相同)

就是這樣,這需要我 6 個小時。 希望它也可以幫助使用 webmin 的人。 如果它對您有幫助,請投贊成票。 謝謝

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM