Bỏ qua, đến nội dung

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

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

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

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

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

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

Nguyên nhân có thể:

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

Cách xử lý:

  1. Kiểm tra quyền: SHOW GRANTS FOR 'user'@'%';
  2. Liệt kê bảng: SHOW TABLES;
  3. Nhấn Refresh để introspect lại

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

Sử dụng hằng ngày

Dữ liệu có đồng bộ real-time không?

Có. Plugin truy vấn trực tiếp MySQL mỗi lần request — không có cache layer. Bất kỳ thay đổi nào trên MySQL sẽ được phản ánh ngay khi refresh trang Digiforce.

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

Không. Chỉ hỗ trợ relation giữa các bảng trong cùng một data source. Plugin tự động phát hiện foreign key trong MySQL và tạo quan hệ hasMany/belongsTo tương ứng.

Hiệu năng với bảng lớn?

  • Plugin sử dụng Sequelize connection pool
  • Phân trang mặc định 20 bản ghi/trang
  • Đảm bảo có index trên cột thường filter/sort
  • MySQL 8.x có cải thiện đáng kể về performance so với 5.7

MySQL 8.x caching_sha2_password có được hỗ trợ?

Có. Driver mysql2 hỗ trợ authentication plugin caching_sha2_password (mặc định của MySQL 8.x). Nếu gặp lỗi, kiểm tra driver mysql2 đã cập nhật phiên bản mới nhất.

Bảng có composite primary key có hoạt động không?

Có. Plugin hỗ trợ bảng với composite primary key (nhiều cột tạo thành primary key). Tuy nhiên, một số thao tác UI có thể hạn chế với composite key.

Lỗi thường gặp

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

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

Cách xử lý:

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 MySQL đã thay đổi nhưng metadata Digiforce chưa cập nhật.

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

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

Cách xử lý: Bật data-source-manager trong Plugin Manager trước khi bật plugin MySQL.

Ký tự tiếng Việt bị lỗi (mojibake)

Nguyên nhân: Database hoặc bảng MySQL không dùng charset utf8mb4.

Cách xử lý:

sql
-- Kiểm tra charset
SHOW VARIABLES LIKE 'character_set%';

-- Đổi charset database
ALTER DATABASE my_database CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

-- Đổi charset bảng
ALTER TABLE my_table CONVERT TO CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

Lỗi SSL handshake failed

Cách xử lý:

  1. Kiểm tra MySQL đã bật SSL: SHOW VARIABLES LIKE '%ssl%';
  2. Nếu dùng self-signed certificate, cấu hình CA certificate
  3. Thử tắt "Reject Unauthorized" để debug (không dùng trên production)

Vấn đề khác

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

Có. Tạo nhiều data source type mysql, mỗi cái trỏ đến instance/database khác nhau.

Plugin có hỗ trợ read replica không?

Mỗi data source trỏ đến một endpoint. Để dùng read replica, tạo data source riêng trỏ đến replica endpoint.

Khác gì với MariaDB plugin?

MySQL và MariaDB tương thích nhau nhưng sử dụng driver riêng:

  • MySQL plugin: dùng mysql2 driver, dialect mysql
  • MariaDB plugin: dùng mariadb driver, dialect mariadb

Dùng plugin tương ứng với loại database để đảm bảo tương thích tốt nhất.