Cấu hình kho lưu trữ cho Backup
Bước đầu tiên là xác định nơi lưu trữ các bản sao lưu. YugabyteDB hỗ trợ lưu trữ trực tiếp trên hệ thống file local hoặc các dịch vụ đám mây như AWS S3, Google Cloud Storage (GCS). Bài hướng dẫn này sẽ sử dụng phương án local path để đơn giản hóa việc triển khai ngay trên server Ubuntu 24.04, nhưng cấu trúc lệnh áp dụng tương tự cho S3/GCS.
Tạo thư mục đích để chứa dữ liệu backup. Thư mục này cần được truy cập bởi user đang chạy tiến trình yugabyte.
sudo mkdir -p /var/lib/yb_backups
sudo chown -R yugabyte:yugabyte /var/lib/yb_backups
Kết quả mong đợi: Thư mục được tạo và quyền sở hữu chuyển sang user yugabyte, không báo lỗi permission.
Định nghĩa biến môi trường hoặc đường dẫn cụ thể cho lệnh backup. Với local storage, đường dẫn bắt đầu bằng file://.
export BACKUP_DIR="file:///var/lib/yb_backups"
Kết quả mong đợi: Biến môi trường được đặt thành công, sẵn sàng để tham chiếu trong các lệnh tiếp theo.
Thực hiện Backup dữ liệu
Backup toàn cụm (Full Cluster Backup)
Sử dụng công cụ yb-admin để tạo bản sao lưu cho toàn bộ dữ liệu trong cụm. Lệnh này sẽ chụp ảnh (snapshot) dữ liệu của tất cả các database và table tại thời điểm thực thi.
yb-admin backup --backup_location=$BACKUP_DIR --include_all_dbs
Kết quả mong đợi: Hệ thống trả về thông báo Backup completed successfully kèm theo ID của bản backup (ví dụ: backup_id: 1234567890). Bạn cần ghi lại ID này để phục vụ cho bước restore sau.
Để kiểm tra trạng thái và chi tiết của bản backup vừa tạo, sử dụng lệnh list.
yb-admin list_backups --backup_location=$BACKUP_DIR
Kết quả mong đợi: Hiển thị danh sách các backup với trạng thái COMPLETED, bao gồm thời gian tạo và kích thước dữ liệu.
Backup từng Database cụ thể
Trong môi trường phân tán, đôi khi bạn chỉ cần sao lưu một database riêng biệt để giảm thời gian và dung lượng. Lệnh này yêu cầu chỉ định tên database cụ thể.
yb-admin backup --backup_location=$BACKUP_DIR --databases="test_db"
Kết quả mong đợi: Hệ thống chỉ sao lưu dữ liệu thuộc database test_db, trả về ID backup mới và trạng thái thành công.
Khôi phục dữ liệu (Restore) từ bản sao lưu
Khôi phục toàn bộ cụm
Để khôi phục toàn bộ cụm từ một bản backup đã tạo, bạn cần chỉ định ID của bản backup đó. Lưu ý: Việc restore toàn bộ sẽ ghi đè lên dữ liệu hiện có trong cụm nếu không có biện pháp bảo vệ.
yb-admin restore --backup_location=$BACKUP_DIR --backup_id= --restore_location=$BACKUP_DIR
Kết quả mong đợi: Quá trình restore bắt đầu, hiển thị tiến độ phần trăm và kết thúc bằng thông báo Restore completed successfully.
Thay thế bằng ID thực tế bạn đã ghi lại ở phần Backup. Nếu muốn khôi phục về một thời điểm cụ thể (Point-in-Time Recovery - PITR) trước khi backup, hãy thêm tham số --restore_time dưới dạng timestamp.
yb-admin restore --backup_location=$BACKUP_DIR --backup_id= --restore_time="2024-05-20T10:30:00Z"
Kết quả mong đợi: Dữ liệu được khôi phục về trạng thái chính xác tại thời điểm 2024-05-20T10:30:00Z.
Khôi phục một Database riêng lẻ
Trong trường hợp chỉ cần phục hồi một database bị lỗi mà không muốn ảnh hưởng đến các database khác trong cụm.
yb-admin restore --backup_location=$BACKUP_DIR --backup_id= --databases="test_db"
Kết quả mong đợi: Chỉ dữ liệu của test_db được khôi phục, các database khác giữ nguyên trạng thái hiện tại.
Kiểm tra tính toàn vẹn dữ liệu sau Restore
So sánh số lượng dòng (Row Count)
Sau khi restore xong, bước quan trọng nhất là xác minh dữ liệu đã được khôi phục chính xác. Kết nối vào YugabyteDB Shell (ySQL) để kiểm tra.
yb-ycqlsh
Kết quả mong đợi: Bạn vào được giao diện shell của YugabyteDB.
Thực hiện lệnh đếm số dòng của các bảng quan trọng để so sánh với dữ liệu trước khi backup.
SELECT COUNT(*) FROM test_db.users;
Kết quả mong đợi: Con số trả về phải khớp chính xác (hoặc lớn hơn nếu có dữ liệu mới được ghi sau thời điểm restore) với dữ liệu gốc.
So sánh checksum dữ liệu
Để đảm bảo không có sự sai lệch về nội dung dữ liệu (data corruption), hãy lấy một bản ghi mẫu và so sánh checksum hoặc nội dung chi tiết.
SELECT md5(content) FROM test_db.logs LIMIT 5;
Kết quả mong đợi: Các giá trị hash trả về phải khớp với giá trị bạn đã lưu trữ hoặc ghi nhận trước khi thực hiện backup.
Thay đổi database để kiểm tra xem các database khác không bị ảnh hưởng khi restore riêng lẻ.
USE other_db;
SELECT COUNT(*) FROM other_db.table_a;
Kết quả mong đợi: Dữ liệu của other_db vẫn nguyên vẹn, không bị xóa hoặc ghi đè nếu bạn chỉ restore test_db.
Verify trạng thái của các Table
Sử dụng công cụ yb-admin để kiểm tra trạng thái sức khỏe của các table sau khi restore.
yb-admin list_tables --databases="test_db"
Kết quả mong đợi: Tất cả các bảng hiển thị trạng thái OK và không có cảnh báo về sự cố phân mảnh hoặc thiếu shard.
Điều hướng series:
Mục lục: Series: Triển khai Database ACID với YugabyteDB trên Ubuntu 24.04
« Phần 5: Mở rộng cụm YugabyteDB lên 3 node và cấu hình Replication
Phần 7: Troubleshooting, giám sát và các mẹo nâng cao cho YugabyteDB »