Cấu hình Backend Storage cho Backup
Apache Doris sử dụng Backend Storage để lưu trữ các bản sao lưu (Backup) và khôi phục (Restore). Bạn cần cấu hình một backend storage trước khi thực hiện lệnh backup. Bài viết này sử dụng MinIO (S3-compatible) làm backend storage vì tính phổ biến và dễ triển khai trên Ubuntu.
Đảm bảo MinIO đã chạy và bucket tên là backup-bucket đã được tạo. Nếu chưa có, hãy tạo bucket qua MinIO Console hoặc lệnh mc mb minio/backup-bucket.
Thực hiện lệnh tạo backend storage trong Apache Doris để liên kết với bucket S3.
SHOW BACKEND STORAGE;
Kết quả mong đợi: Danh sách các backend storage hiện có. Nếu chưa có, bạn sẽ thấy bảng trống hoặc chỉ có backend mặc định.
Thực hiện lệnh tạo backend storage mới. Thay thế your-access-key và your-secret-key bằng thông tin thật của MinIO/S3.
CREATE BACKEND STORAGE "s3_backup_storage"
FROM "minio"
WITH (
"access_key" = "your-access-key",
"secret_key" = "your-secret-key",
"endpoint" = "http://192.168.1.100:9000",
"bucket" = "backup-bucket",
"region" = "us-east-1"
);
Kết quả mong đợi: Lệnh chạy thành công không báo lỗi, thông báo Query executed successfully.
Verify kết quả bằng cách liệt kê lại backend storage.
SHOW BACKEND STORAGE;
Kết quả mong đợi: Xuất hiện dòng s3_backup_storage với trạng thái OK.
Thực hiện Backup toàn bộ Database
Backup Database đơn lẻ
Lệnh BACKUP tạo một snapshot của dữ liệu tại thời điểm hiện tại và lưu vào backend storage đã cấu hình. Backup bao gồm cả metadata (schema) và data.
Thực hiện backup database analytics_db vào backup set tên backup_2024_10.
BACKUP analytics_db
FROM s3_backup_storage
TO "backup_2024_10";
Kết quả mong đợi: Lệnh trả về Query executed successfully. Quá trình backup chạy ngầm, có thể mất vài phút tùy dung lượng.
Backup với Label và Timeout
Để quản lý nhiều phiên bản backup, bạn nên đặt WITH clause để chỉ định label và timeout. Label giúp xác định phiên bản restore sau này.
Thực hiện backup với label cụ thể và timeout 30 phút.
BACKUP analytics_db
FROM s3_backup_storage
TO "backup_full_v2"
WITH (
"label" = "backup_label_v2",
"timeout" = "30m"
);
Kết quả mong đợi: Lệnh thành công. Label backup_label_v2 được ghi nhận trong lịch sử backup.
Verify trạng thái Backup
Để kiểm tra xem backup đã hoàn thành chưa và xem chi tiết các file đã lưu, sử dụng lệnh SHOW BACKUP.
SHOW BACKUP;
Kết quả mong đợi: Danh sách các job backup. Cột State phải là FINISHED. Cột Label hiển thị tên label bạn đã đặt.
Để xem chi tiết hơn về backup cụ thể, dùng lệnh SHOW BACKUP kèm filter.
SHOW BACKUP FROM analytics_db WHERE Label = "backup_label_v2";
Kết quả mong đợi: Chi tiết của job backup đó, bao gồm Start time, End time và Size.
Khôi phục dữ liệu (Restore) từ bản sao lưu
Restore Database đã mất
Khi database bị xóa hoặc hỏng dữ liệu, bạn dùng lệnh RESTORE để đưa dữ liệu về trạng thái tại thời điểm backup. Lưu ý: Restore sẽ ghi đè lên database hiện có nếu tên trùng.
Giả sử database analytics_db đã bị xóa hoặc rỗng, khôi phục lại từ backup set backup_full_v2.
RESTORE analytics_db
FROM s3_backup_storage
WITH (
"backup_path" = "backup_full_v2",
"label" = "backup_label_v2"
);
Kết quả mong đợi: Lệnh trả về Query executed successfully. Dữ liệu và schema sẽ được phục hồi.
Restore với tùy chọn Drop nếu tồn tại
Nếu database đích đã tồn tại và bạn muốn ghi đè hoàn toàn, thêm tham số "drop_if_exists" = "true".
RESTORE analytics_db
FROM s3_backup_storage
WITH (
"backup_path" = "backup_full_v2",
"label" = "backup_label_v2",
"drop_if_exists" = "true"
);
Kết quả mong đợi: Database cũ bị xóa sạch và dữ liệu từ backup được nạp vào.
Verify kết quả Restore
Kiểm tra xem dữ liệu đã được khôi phục chưa bằng cách đếm số lượng dòng.
COUNT(*) FROM analytics_db.sales_table;
Kết quả mong đợi: Con số trả về phải khớp với số lượng dòng tại thời điểm bạn thực hiện backup.
Để kiểm tra trạng thái của job restore, dùng lệnh SHOW RESTORE.
SHOW RESTORE;
Kết quả mong đợi: Cột State phải là FINISHED. Nếu là FAILED, kiểm tra log ở cột Error Message.
Quản lý vòng đời dữ liệu (Data Lifecycle Management)
Cấu hình TTL (Time To Live)
TTL cho phép Apache Doris tự động xóa các partition dữ liệu cũ dựa trên thời gian. Điều này giúp tiết kiệm dung lượng và giữ cho dữ liệu luôn mới.
Thêm hoặc sửa TTL cho table sales_table trong database analytics_db để xóa dữ liệu sau 90 ngày.
ALTER TABLE analytics_db.sales_table
SET Ttl = "90d";
Kết quả mong đợi: Lệnh thành công. Các partition cũ hơn 90 ngày sẽ tự động bị xóa bởi BE (Backend) theo lịch trình.
Để kiểm tra TTL đã được áp dụng chưa.
SHOW CREATE TABLE analytics_db.sales_table;
Kết quả mong đợi: Trong nội dung lệnh CREATE TABLE, bạn sẽ thấy dòng TTL = "90d".
Quản lý phiên bản dữ liệu (Rollback và Snapshot)
Apache Doris hỗ trợ rollback thông qua cơ chế restore từ snapshot. Nếu bạn thực hiện sai thao tác (ví dụ: DELETE hoặc UPDATE nhầm), bạn có thể rollback về snapshot gần nhất.
Tạo snapshot thủ công ngay trước khi thực hiện một thao tác rủi ro cao (ví dụ: xóa toàn bộ dữ liệu test).
BACKUP analytics_db
FROM s3_backup_storage
TO "snapshot_before_risky_op"
WITH (
"label" = "snapshot_risky_v1"
);
Kết quả mong đợi: Backup hoàn thành. Bạn có một điểm khôi phục an toàn.
Thực hiện thao tác rủi ro (ví dụ: xóa dữ liệu).
DELETE FROM analytics_db.sales_table WHERE status = 'test';
Kết quả mong đợi: Dữ liệu bị xóa.
Thực hiện Rollback bằng cách restore lại snapshot đã tạo.
RESTORE analytics_db
FROM s3_backup_storage
WITH (
"backup_path" = "snapshot_before_risky_op",
"label" = "snapshot_risky_v1",
"drop_if_exists" = "false"
);
Kết quả mong đợi: Dữ liệu được khôi phục về trạng thái trước khi xóa.
Verify Rollback
Kiểm tra lại dữ liệu đã được phục hồi.
SELECT * FROM analytics_db.sales_table WHERE status = 'test' LIMIT 10;
Kết quả mong đợi: Dữ liệu test xuất hiện trở lại.
Quản lý và dọn dẹp các Backup cũ
Liệt kê và xóa Backup
Để tránh đầy dung lượng S3/HDFS, bạn cần xóa các backup cũ không còn dùng đến. Apache Doris không có lệnh DROP BACKUP trực tiếp, bạn phải xóa file trên backend storage và cập nhật metadata nếu cần.
Liệt kê các backup cũ trong backend storage.
SHOW BACKUP;
Kết quả mong đợi: Danh sách các job backup. Xác định các job có State là FINISHED và thời gian End time quá cũ.
Xóa file backup trên MinIO/S3 trực tiếp (dùng lệnh mc hoặc AWS CLI). Ví dụ xóa backup set backup_2024_01.
mc rm --recursive minio/backup-bucket/analytics_db/backup_2024_01/
Kết quả mong đợi: File trên S3 bị xóa. Lưu ý: Nếu bạn muốn xóa metadata khỏi Doris, bạn cần restart FE hoặc đợi FE quét lại (tùy phiên bản), nhưng việc xóa file vật lý là quan trọng nhất để giải phóng dung lượng.
Cấu hình tự động xóa Backup (S3 Lifecycle Policy)
Nếu dùng S3/MinIO, bạn nên cấu hình Lifecycle Policy trên phía Storage để tự động xóa backup sau N ngày, thay vì xóa thủ công trong Doris.
Trong MinIO Console, vào Bucket backup-bucket -> Lifecycle -> Add Rule.
Cấu hình:
- Prefix: analytics_db/
- Action: Delete
- Days: 30 (Xóa sau 30 ngày)
Kết quả mong đợi: Các file backup cũ hơn 30 ngày sẽ tự động biến mất khỏi MinIO vào đầu ngày theo quy tắc.
Verify Cleanup
Kiểm tra dung lượng bucket sau khi xóa.
mc du minio/backup-bucket
Kết quả mong đợi: Dung lượng giảm đáng kể so với trước khi xóa.
Điều hướng series:
Mục lục: Series: Triển khai Database Columnar với Apache Doris trên Ubuntu 24.04
« Phần 6: Tối ưu hóa truy vấn và phân tích dữ liệu Columnar
Phần 8: Troubleshooting và các mẹo nâng cao cho Apache Doris »