Käytän mysql:n mysql-connector-python -kirjastoa yrittäessäni yhdistää lähiverkon muiden laitteiden MariaDB -tietokantaan, mutta se epäonnistui ja lisäksi ohjelma sulkeutui suoraan ilman virheilmoituksia.

Ongelman kuvaus

Ohjelmistoversiot:

  • MariaDB server 10.11.6

  • mysql-connector-python 9.2.0

  • MariaDB-palvelin, IP on 192.168.1.60

  • Asiakas, IP on 192.168.1.35

Python-koodi on seuraava:

import mysql.connector  
import logging  
  
# Konfiguroi lokitus  
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')  
  
try:  
    logging.info("Yhdistetään tietokantaan...")  
    connection = mysql.connector.connect(  
        host="192.168.1.60",  
        port=3306,  
        user="mysql",  
        password="xxx")  
    logging.info("Yhteys muodostettu.")  
  
    # Luo kursoriobjekti SQL-kyselyiden suorittamista varten  
    cursor = connection.cursor()  
  
    # Hae kaikki tietokannat  
    logging.info("Suoritetaan SHOW DATABASES -kysely...")  
    cursor.execute("SHOW DATABASES")  
  
    # Tulosta kaikki tietokannat ja jokaisen tietokannan taulut  
    for (database,) in cursor.fetchall():  
        logging.info(f"Tietokanta: {database}")  
  
        # Vaihda nykyiseen tietokantaan  
        cursor.execute(f"USE {database}")  
  
        # Hae ja tulosta kaikki nykyisen tietokannan taulut  
        cursor.execute("SHOW TABLES")  
  
        for (table,) in cursor.fetchall():  
            logging.info(f"  Taulu: {table}")  
  
    # Sulje kursori ja yhteys  
    cursor.close()  
    connection.close()  
    logging.info("Yhteys suljettu.")  
  
except mysql.connector.Error as err:  
    logging.error(f"Virhe: {err}")  
except Exception as e:  
    logging.error(f"Odottamaton virhe: {e}")

Tämän koodin suorittamisen jälkeen ohjelma sulkeutuu suoraan antamatta virheilmoituksia.

Katsoin MariaDB-palvelimen lokitietoja ja löysin seuraavan virheilmoituksen.

mariadbd: [Warning] Aborted connection 48 to db: 'unconnected' user: 'unauthenticated' host: '192.168.1.35' (This connection closed normally without authentication)

Ongelman ratkaisuyritykset

Koska MariaDB-palvelin pystyy vastaanottamaan yhteydenottopyynnön, molempien laitteiden palomuurin asetukset ovat kunnossa.

Tarkistin kirjautumiskäyttäjän oikeudet ja nekin olivat kunnossa.

Etsin paljon tietoa ja kokeilin erilaisia menetelmiä. Kuitenkin ongelmaa ei pystytty ratkaisemaan millään tavalla.

Lopulta kokeilin toista Python-kirjastoa, pymysql (versio: 1.1.1), yhdistääkseni MariaDB-palvelimeen seuraavalla koodilla:

import pymysql  
  
# Yhdistä MariaDB-palvelimeen  
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()

Yhteyden muodostaminen ja MariaDB:n version tulostaminen onnistui ilman virheitä.

Silti en tiedä syytä, miksi aiempi yhteys epäonnistui.

Muut versiot tästä sivusta

Tästä artikkelista on olemassa useita kieliversioita.

Jos haluat jättää kommentin, vieraile seuraavilla sivuilla:

ZH EN ZH-TW JA

Nämä sivut tukevat vain selaamista, eivätkä salli kommenttien jättämistä, mutta tarjoavat enemmän kielivaihtoehtoja ja latautuvat nopeammin:

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

Tämä artikkeli on käännetty kiinasta (yksinkertaistettu) suomeksi tekoälyn avulla.