Używam biblioteki mysql-connector-python dla mysql, próbując połączyć się z bazą danych MariaDB na innym urządzeniu w sieci lokalnej, ale to się nie udaje, a program po prostu się zamyka bez wyświetlania jakichkolwiek komunikatów o błędach.

Opis problemu

Wersje oprogramowania:

  • MariaDB server 10.11.6

  • mysql-connector-python 9.2.0

  • MariaDB server, IP to 192.168.1.60

  • Klient, IP to 192.168.1.35

Kod Pythona:

import mysql.connector  
import logging  
  
# Konfiguracja logowania  
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')  
  
try:  
    logging.info("Łączenie z bazą danych...")  
    connection = mysql.connector.connect(  
        host="192.168.1.60",  
        port=3306,  
        user="mysql",  
        password="xxx")  
    logging.info("Połączenie ustanowione.")  
  
    # Utworzenie obiektu kursora do wykonywania zapytań SQL  
    cursor = connection.cursor()  
  
    # Pobranie wszystkich baz danych  
    logging.info("Wykonywanie zapytania SHOW DATABASES...")  
    cursor.execute("SHOW DATABASES")  
  
    # Wyświetlenie wszystkich baz danych oraz tabel w każdej bazie danych  
    for (database,) in cursor.fetchall():  
        logging.info(f"Baza danych: {database}")  
  
        # Przełączenie na bieżącą bazę danych  
        cursor.execute(f"USE {database}")  
  
        # Pobranie i wyświetlenie wszystkich tabel w bieżącej bazie danych  
        cursor.execute("SHOW TABLES")  
  
        for (table,) in cursor.fetchall():  
            logging.info(f"  Tabela: {table}")  
  
    # Zamknięcie kursora i połączenia  
    cursor.close()  
    connection.close()  
    logging.info("Połączenie zamknięte.")  
  
except mysql.connector.Error as err:  
    logging.error(f"Błąd: {err}")  
except Exception as e:  
    logging.error(f"Nieoczekiwany błąd: {e}")

Po uruchomieniu tego kodu program po prostu się zamyka bez wyświetlania jakichkolwiek komunikatów o błędach.

Sprawdziłem logi serwera MariaDB i znalazłem następujący komunikat o błędzie.

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

Próba rozwiązania problemu

Ponieważ serwer MariaDB odbiera żądania połączenia, konfiguracja zapory ogniowej na obu urządzeniach jest prawidłowa.

Sprawdziłem uprawnienia użytkownika logowania i one również są poprawne.

Przeszukałem wiele źródeł i wypróbowałem różne metody. Niestety, nie udało mi się rozwiązać problemu.

Ostatecznie spróbowałem użyć innej biblioteki Pythona, pymysql (wersja: 1.1.1), do połączenia się z serwerem MariaDB. Kod wygląda następująco:

import pymysql  
  
# Połączenie z serwerem MariaDB  
conn = pymysql.connect(  
    host="192.168.1.60",  
    port=3306,  
    user="mysql",  
    password="xxx"  
)  
  
cursor = conn.cursor()  
cursor.execute("SELECT VERSION()")  
print("Wersja MariaDB:", cursor.fetchone()[0])  
  
cursor.close()  
conn.close()

Bez żadnych błędów, połączenie zostało nawiązane pomyślnie, a wersja MariaDB została wyświetlona.

Nadal jednak nie wiem, dlaczego wcześniej nie można było się połączyć.

Inne wersje tej strony

Ten artykuł jest dostępny w wielu wersjach językowych.

Jeśli chcesz opublikować komentarz, odwiedź następujące strony:

ZH EN ZH-TW JA

Te strony umożliwiają tylko przeglądanie, nie można publikować komentarzy ani wiadomości, ale oferują więcej opcji językowych i krótszy czas ładowania:

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

Ten artykuł został przetłumaczony przez AI z języka chińskiego (uproszczonego) na polski.