地球人

地球人的空间

世上本没有路
tg_channel
mastodon
pleroma

MariaDBサーバーがunauthenticatedエラーを報告?それはMySQL-connector-pythonの問題かもしれません。

私は mysql のmysql-connector-pythonライブラリを使用して、ローカルネットワーク内の他のデバイスのMariaDBデータベースに接続しようとしましたが、失敗しました。そして、直接終了し、エラーメッセージは出力されませんでした。

問題の説明#

ソフトウェアバージョン:

  • MariaDB サーバー 10.11.6

  • mysql-connector-python 9.2.0

  • MariaDB サーバー、IP は 192.168.1.60

  • クライアント、IP は 192.168.1.35

Python コードは以下の通りです:

import mysql.connector  
import logging  
  
# ログ記録の設定  
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')  
  
try:  
    logging.info("データベースに接続中...")  
    connection = mysql.connector.connect(  
        host="192.168.1.60",  
        port=3306,  
        user="mysql",  
        password="xxx")  
    logging.info("接続が確立されました。")  
  
    # SQLクエリを実行するためのカーソルオブジェクトを作成  
    cursor = connection.cursor()  
  
    # すべてのデータベースを取得  
    logging.info("SHOW DATABASESクエリを実行中...")  
    cursor.execute("SHOW DATABASES")  
  
    # すべてのデータベースと各データベース内のテーブル名を印刷  
    for (database,) in cursor.fetchall():  
        logging.info(f"データベース: {database}")  
  
        # 現在のデータベースに切り替え  
        cursor.execute(f"USE {database}")  
  
        # 現在のデータベース内のすべてのテーブルを取得して印刷  
        cursor.execute("SHOW TABLES")  
  
        for (table,) in cursor.fetchall():  
            logging.info(f"  テーブル: {table}")  
  
    # カーソルと接続を閉じる  
    cursor.close()  
    connection.close()  
    logging.info("接続が閉じられました。")  
  
except mysql.connector.Error as err:  
    logging.error(f"エラー: {err}")  
except Exception as e:  
    logging.error(f"予期しないエラー: {e}")

このコードを実行した後、直接終了し、エラーメッセージは出力されませんでした。

私はMariaDBサーバー側のサービスログを確認し、次のようなエラーメッセージを見つけました。

mariadbd: [Warning] Aborted connection 48 to db: 'unconnected' user: 'unauthenticated' host: '192.168.1.35' (この接続は認証なしで正常に閉じられました)

問題解決の試み#

MariaDBサーバー側が接続リクエストを受け取れるので、両方のデバイスのファイアウォールの設定は正常であると言えます。

私はログインユーザーの権限を確認しましたが、こちらも正常でした。

多くの資料を調べ、さまざまな方法を試しました。しかし、どうしてもこの問題を解決できませんでした。

最後に、別の Python ライブラリpymysql(バージョン:1.1.1)を使用してMariaDBサーバーに接続しようとしました。コードは以下の通りです:

import pymysql  
  
# MariaDBサーバーに接続  
conn = pymysql.connect(  
    host="192.168.1.60",  
    port=3306,  
    user="mysql",  
    password="xxx"  
)  
  
cursor = conn.cursor()  
cursor.execute("SELECT VERSION()")  
print("MariaDBのバージョン:", cursor.fetchone()[0])  
  
cursor.close()  
conn.close()

エラーは出ず、成功裏に接続し、MariaDB のバージョンを印刷しました。

しかし、以前接続できなかった理由はまだわかりません。

このウェブページの他のバージョン#

この記事には多言語バージョンがあります。

コメントを残したい場合は、以下のウェブページにアクセスしてください:

ZH EN ZH-TW JA

これらのウェブページは閲覧専用で、コメントやメッセージを残すことはできませんが、より多くの言語オプションを提供し、読み込み時間が短くなります:

ZH EN ZH-TW JA RU KO CS ES AR FR PT DE TR IT NL SV DA FI PL UK HE RO HU EL HR TH HI BN ID SW VI NO

読み込み中...
文章は、創作者によって署名され、ブロックチェーンに安全に保存されています。