Bỏ qua, đến nội dung

Câu hỏi thường gặp — MariaDB Data Source

Cài đặt và kết nối

Không thể kết nối đến MariaDB, báo lỗi timeout?

Cách xử lý theo thứ tự:

  1. Kiểm tra MariaDB đang chạy và lắng nghe trên port 3306: systemctl status mariadb
  2. Xác nhận firewall/security group cho phép kết nối từ IP của server Digiforce
  3. Thử kết nối thủ công từ server Digiforce: mysql -h <host> -P 3306 -u <user> -p
  4. Kiểm tra MariaDB không bind chỉ 127.0.0.1 — cần 0.0.0.0 hoặc IP cụ thể trong bind-address
  5. Kiểm tra max_connections trên MariaDB chưa đạt giới hạn

Kết nối thành công nhưng không thấy bảng nào?

Nguyên nhân có thể:

  1. User MariaDB không có quyền SELECT trên các bảng
  2. Tên database sai
  3. Database rỗng (không có bảng)

Cách xử lý:

  1. Kiểm tra quyền: SHOW GRANTS FOR 'user'@'%';
  2. Xác nhận tên database: SHOW DATABASES;
  3. Nhấn Refresh để introspect lại schema

Có cần tạo user riêng cho Digiforce không?

Khuyến nghị mạnh. Tạo user riêng với quyền tối thiểu:

sql
-- Chỉ đọc (an toàn nhất)
GRANT SELECT ON my_database.* TO 'digiforce_ro'@'%';

-- Đọc và ghi
GRANT SELECT, INSERT, UPDATE, DELETE ON my_database.* TO 'digiforce_rw'@'%';

Tránh dùng user root hoặc user có quyền SUPER/ALL PRIVILEGES.

Sử dụng hằng ngày

Dữ liệu trên Digiforce có đồng bộ real-time với MariaDB không?

Có. Plugin truy vấn trực tiếp MariaDB mỗi lần request — không có cache layer. Dữ liệu luôn cập nhật theo MariaDB. Tuy nhiên, nếu có ứng dụng khác ghi vào MariaDB, Digiforce sẽ thấy thay đổi ngay khi refresh trang.

Có thể tạo relation giữa bảng nội bộ và bảng MariaDB không?

Không. Hiện tại chỉ hỗ trợ relation giữa các bảng trong cùng một data source. Không thể liên kết cross-datasource (ví dụ: bảng PostgreSQL nội bộ với bảng MariaDB bên ngoài).

Hiệu năng như thế nào với bảng lớn?

Plugin sử dụng Sequelize connection pool để tối ưu kết nối. Để đảm bảo hiệu năng:

  • Tạo index phù hợp trên MariaDB cho các cột thường filter/sort
  • Phân trang mặc định 20 bản ghi/trang — giảm tải query
  • Tránh SELECT * trên bảng có nhiều cột TEXT/BLOB
  • Giám sát slow query log trên MariaDB

Có thể kết nối nhiều MariaDB instance cùng lúc không?

Có. Tạo nhiều data source với type mariadb, mỗi cái trỏ đến instance khác nhau. Mỗi data source độc lập về kết nối và collection.

Lỗi thường gặp

Lỗi "Access denied" khi ghi dữ liệu

Nguyên nhân: User MariaDB không có quyền INSERT, UPDATE hoặc DELETE.

Cách xử lý: Cấp quyền phù hợp:

sql
GRANT INSERT, UPDATE, DELETE ON my_database.* TO 'digiforce_rw'@'%';
FLUSH PRIVILEGES;

Lỗi "Unknown column" sau khi thay đổi schema

Nguyên nhân: Cấu trúc bảng trên MariaDB đã thay đổi (thêm/xóa cột) nhưng metadata trong Digiforce chưa được cập nhật.

Cách xử lý: Vào Data sources → [data source] → Refresh để introspect lại schema.

Lỗi "plugin need data-source-manager plugin enabled"

Nguyên nhân: Plugin data-source-manager chưa được kích hoạt.

Cách xử lý: Vào Plugin Manager, bật data-source-manager trước, sau đó bật plugin-data-source-external-mariadb.

Kiểu ENUM không hiển thị đúng options

Nguyên nhân: Plugin phân tích chuỗi ENUM(...) từ định nghĩa cột. Nếu giá trị enum chứa ký tự đặc biệt hoặc dấu phẩy, có thể parse sai.

Cách xử lý: Đảm bảo giá trị ENUM đơn giản (chữ, số, gạch dưới). Nếu cần giá trị phức tạp, cân nhắc dùng bảng lookup thay vì ENUM.

MariaDB có khác gì MySQL khi cấu hình?

MariaDB tương thích giao thức MySQL nhưng plugin sử dụng driver riêng (dialect mariadb) để tối ưu. Cấu hình giống MySQL nhưng:

  • Port mặc định giống: 3306
  • Cú pháp SQL tương thích
  • Một số kiểu dữ liệu riêng MariaDB (INET6, SEQUENCE...) có thể chưa được map đầy đủ