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:
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.