Tôi sử dụng thư viện mysql-connector-python của mysql để thử kết nối đến cơ sở dữ liệu MariaDB của các thiết bị khác trong mạng LAN, nhưng không thành công và bị thoát trực tiếp mà không có bất kỳ thông tin lỗi nào.

Mô tả vấn đề

Phiên bản phần mềm:

  • MariaDB server 10.11.6

  • mysql-connector-python 9.2.0

  • MariaDB server, IP là 192.168.1.60

  • Máy khách, IP là 192.168.1.35

Mã Python như sau:

import mysql.connector  
import logging  
  
# Cấu hình ghi log  
logging.basicConfig(level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')  
  
try:  
    logging.info("Đang kết nối đến cơ sở dữ liệu...")  
    connection = mysql.connector.connect(  
        host="192.168.1.60",  
        port=3306,  
        user="mysql",  
        password="xxx")  
    logging.info("Đã thiết lập kết nối.")  
  
    # Tạo một đối tượng cursor để thực hiện truy vấn SQL  
    cursor = connection.cursor()  
  
    # Lấy tất cả các cơ sở dữ liệu  
    logging.info("Đang thực hiện truy vấn SHOW DATABASES...")  
    cursor.execute("SHOW DATABASES")  
  
    # In tất cả các cơ sở dữ liệu và tên bảng trong mỗi cơ sở dữ liệu  
    for (database,) in cursor.fetchall():  
        logging.info(f"Cơ sở dữ liệu: {database}")  
  
        # Chuyển sang cơ sở dữ liệu hiện tại  
        cursor.execute(f"USE {database}")  
  
        # Lấy và in tất cả các bảng trong cơ sở dữ liệu hiện tại  
        cursor.execute("SHOW TABLES")  
  
        for (table,) in cursor.fetchall():  
            logging.info(f"  Bảng: {table}")  
  
    # Đóng cursor và kết nối  
    cursor.close()  
    connection.close()  
    logging.info("Đã đóng kết nối.")  
  
except mysql.connector.Error as err:  
    logging.error(f"Lỗi: {err}")  
except Exception as e:  
    logging.error(f"Lỗi không mong muốn: {e}")

Sau khi chạy đoạn mã này, nó thoát trực tiếp mà không đưa ra bất kỳ thông tin lỗi nào.

Tôi xem nhật ký dịch vụ của máy chủ MariaDB và thấy thông tin lỗi sau.

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

Thử giải quyết vấn đề

Vì máy chủ MariaDB có thể nhận được yêu cầu kết nối, nên cấu hình tường lửa của cả hai thiết bị đều bình thường.

Tôi đã kiểm tra quyền của người dùng đăng nhập và thấy nó cũng bình thường.

Tôi đã tìm kiếm rất nhiều tài liệu và thử nhiều cách khác nhau. Nhưng dù thế nào, tôi vẫn không thể giải quyết được vấn đề này.

Cuối cùng, tôi đã thử sử dụng một thư viện python khác là pymysql (phiên bản: 1.1.1) để kết nối đến máy chủ MariaDB, mã như sau:

import pymysql  
  
# Kết nối đến máy chủ MariaDB  
conn = pymysql.connect(  
    host="192.168.1.60",  
    port=3306,  
    user="mysql",  
    password="xxx"  
)  
  
cursor = conn.cursor()  
cursor.execute("SELECT VERSION()")  
print("Phiên bản MariaDB:", cursor.fetchone()[0])  
  
cursor.close()  
conn.close()

Không có bất kỳ lỗi nào, kết nối thành công và in ra phiên bản MariaDB.

Nhưng vẫn không biết lý do tại sao trước đó không thể kết nối.

Các phiên bản khác của trang web này

Bài viết này có nhiều phiên bản ngôn ngữ.

Nếu bạn muốn bình luận, vui lòng truy cập các trang web sau:

ZH EN ZH-TW JA

Các trang web này chỉ hỗ trợ duyệt xem, không thể đăng bình luận hoặc tin nhắn, nhưng cung cấp nhiều tùy chọn ngôn ngữ hơn và thời gian tải nhanh hơn:

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

Bài viết này được dịch từ Chinese (Simplified) sang Vietnamese bằng AI.