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

問題の説明

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

  • MariaDB server 10.11.6

  • mysql-connector-python 9.2.0

  • MariaDB server、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' (This connection closed normally without authentication)

問題解決の試み

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 version:", 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

この記事は、AI によって Chinese (Simplified) から Japanese に翻訳されました。