Backup and Restore Databases

Một số notes rút ra sau khi học course Relational Database Administration (DBA) tại Coursera.

Backup and restore là một thuật ngữ chỉ quá trình sao lưu dữ liệu vì mục đích bảo vệ – khôi phục sau khi mất mát dữ liệu hoặc di chuyển dữ liệu từ cơ sở dữ liệu này sang cơ sở dữ liệu khác, nhằm phục vụ mục đích việc thay đổi hệ quản trị cơ sở dữ liệu quan hệ (RDBMS), chia sẻ hoặc nhận dữ liệu, tạo bản sao dữ liệu để sử dụng ở một hệ thống khác, ví dụ như môi trường dev hoặc test.

Có nhiều phương pháp khác nhau để backup database, bao gồm logical backup và physical backup. Đối với logical backup, ta cũng có các chiến lược backup khác nhau tùy vào tính chất cơ sở dữ liệu, bao gồm Full backup, Point-in-time backup, Differential backup và Incremental backup. Bài viết sẽ chỉ ra sự khác nhau cơ bản giữa các phương pháp và chiến lược này, và khi nào thì nên áp dụng chúng.


Logical backup & physical backup

Logical backup (sao lưu logic) tạo một tệp chứa các lệnh DDL (data definition language – như create table) và DML (deta manipulation language – như insert) để tái tạo các đối tượng và dữ liệu trong cơ sở dữ liệu. Các tệp sao lưu này có thể được sử dụng cho cơ sở dữ liệu trên cùng hệ thống hoặc một hệ thống khác.

Ưu điểm của logical backup là hoàn toàn có thể thực hiện một cách tự động bằng scripts, dễ dàng quản lý các bản sao lưu. Ngoài ra, logical backup cho phép backup một database hoặc một table riêng lẻ.

Tuy nhiên, logical backup có thể mất nhiều thời gian đối với cơ sở dữ liệu lớn và có thể ảnh hưởng đến hiệu suất của các truy vấn khác do phải chạy một lượng lớn các lệnh insert vào database. Logical backup cũng không cho phép sao lưu các tệp logs hoặc cấu hình database.

Physical backup (sao lưu vật lý) tạo ra một bản sao vật lý của tất cả các files và folders lưu thông tin về tabel, database và các database object khác như file config, logs để hỗ trợ khôi phục theo thời gian.

Physical backup thường nhỏ hơn và nhanh hơn sao lưu logic, hữu ích cho các cơ sở dữ liệu lớn hoặc quan trọng đòi hỏi thời gian khôi phục nhanh.

Tuy nhiên, physical backup thường không thể dễ dàng khôi phục tables hoặc database riêng lẻ. Ngoài ra, vì tệp sao lưu cụ thể cho một RDBMS nhất định, ta chỉ có thể khôi phục nó trên hệ thống tương tự.

Phương pháp backup phổ biến

Có nhiều phương pháp backup khác nhau, các phương pháp backup phổ biến bao gồm full backup, point-in-time backup, differential backup và incremental backup.

Full backup

Full backup chứa tất cả dữ liệu trong đối tượng sao lưu. Thực hiện full backup giúp đơn giản hóa quá trình khôi phục, vì ta chỉ cần tìm bản backup mới nhất và khôi phục tệp đó.

Tuy nhiên, khi kích thước cơ sở dữ liệu tăng, thời gian, băng thông và không gian lưu trữ cho tệp sao lưu cũng tăng lên. Lúc này, ta có thể lựa chọn (1) giữ nhiều bản sao lưu cũ hoặc (2) chỉ giữ lại những backup mới nhất và chấp nhận rủi ro không thể khôi phục dữ liệu nếu tệp sao lưu bị hỏng.

Ngoài ra, nếu chỉ một phần dữ liệu trong database thay đổi thường xuyên, ta có thể không cần thiết phải thực hiện full backup.

Point-in-time backup

Khi khôi phục một bản sao lưu đầy đủ, ta đang khôi phục dữ liệu về trạng thái khi bản sao lưu được tạo. Tuy nhiên, trong thời gian từ khi sao lưu được tạo đến lúc khôi phục, cơ sở dữ liệu có thể đã xử lý nhiều transaction, và những transaction này cần được khôi phục lại.

Một cách để giải quyết vấn đề này là bật chế độ ghi logs cho từng transactions trong cơ sở dữ liệu, và sử dụng thông tin trong logs để áp dụng lại các tracsaction vào cơ sở dữ liệu mới. Quá trình này được gọi là recovery và cho phép ta khôi phục dữ liệu về một thời điểm cụ thể (point-in-time recovery).

Ví dụ, nếu một lệnh DML được thực thi lúc 10h đã xóa dữ liệu một cách không đúng, ta có thể khôi phục lại bản full backup mới nhất và áp dụng lại các transactions cho đến trước 10h, giảm thiểu mất mát các thay đổi dữ liệu đã xảy ra giữa lần sao lưu đầy đủ cuối cùng và thời điểm dữ liệu sai đã bị xóa.

Các hệ thống cơ sở dữ liệu khác nhau sử dụng thuật ngữ khác nhau để chỉ tập logs chứa thông tin về transactions, với MySQL là binary log, Postgres là write-ahead log, và Db2 on Cloud là transaction log.

Differential backup

Differential backup một bản sao lưu chứa tất cả dữ liệu đã thay đổi kể từ lần sao lưu đầy đủ trước đó, làm cho nó nhỏ hơn rất nhiều so với tệp full backup, giảm thời gian, băng thông và không gian lưu trữ cần thiết cho việc sao lưu trong khi vẫn cho phép khôi phục một bản sao gần đây của dữ liệu.

Ví dụ, ta có thể thực hiện một full backup vào Chủ Nhật và differential backup vào mỗi ngày trong tuần. Mỗi differential backup chứa tất cả các thay đổi từ thời điểm full backup mới nhất. Vì vậy nếu ta cần khôi phục cơ sở dữ liệu vào ngày Thứ Ba, ta chỉ cần khôi phục bản full backup từ Chủ Nhật và bàn differential backup của ngày Thứ 3.

Việc khôi phục dữ liệu từ bản full backup và differential backup sẽ mất nhiều thời gian hơn so với việc chỉ khôi phục một bản full backup, nhưng do tần suất sao lưu sẽ luôn lớn hơn tần suất thực hiện khôi phục, nên về tổng thể thì ta sẽ tiết kiệm thời gian và không gian lưu trữ hơn.

Incremental backup

Incremental backup tương tự như differential backup nhưng chỉ chứa dữ liệu đã thay đổi kể từ lần backup cuối cùng được thực hiện.

Ví dụ, ta có thể thực hiện một full backup vào Chủ Nhật và thực hiện incremental backup hằng ngày trong tuần, mỗi bản backup chỉ chứa các thay đổi từ lần backup thực hiện vào ngày trước đó. Do đó, nếu cần khôi phục cơ sở dữ liệu vào ngày Thứ Ba, trước tiên, ta cần khôi phục bản full backup từ Chủ Nhật, sau đó khôi phục bản backup ngày Thứ Hai và bản backup ngày Thứ Ba.

Việc khôi phục dữ liệu từ full backup và các bản incremental backup sẽ mất nhiều thời gian hơn so với việc chỉ khôi phục một bản full backup hoặc khôi phục differential backup, nhưng thời gian để thực hiện incremental backup sẽ nhanh hơn nhiều so với các phương pháp còn lại.

Do đó, tùy vào volume và velocity cùng các yếu tố khác, ta có thể lựa chọn các hình thức backup & restore khác nhau cho phù hợp với database hiện có.

Tổng kết

Có nhiều quyết định cần đưa ra khi triển khai backup dữ liệu. Một số yếu tố cần cân nhắc khi triển khai backup bao gồm:

  1. Tần suất thay đổi của dữ liệu: Dữ liệu có tần suất thay đổi càng lớn thì càng cần được backup. Ví dụ, một bảng chứa thông tin sản phẩm có thể ít thay đổi hơn 1 bảng chứa hóa đơn khách hàng, vì vậy, nó có thể sao lưu với tần suất ít hơn bảng chứa hóa đơn.
  2. Độ lớn của dữ liệu: Nếu 1 bảng quá lớn, có thể xem xét triển khai differential backup hoặc incremental backup.
  3. Thời gian thực hiện sao lưu: Dữ liệu nên được backup lúc có ít transaction nhất. Ví dụ, nếu dữ liệu được truy cập chủ yếu trong giờ hành chính, có thể thực hiện backup lúc nửa đêm. Nếu dữ liệu được truy cập 24/7, có thể thực hiện full backup vào cuối tuần và differential backup và incremental backup hằng ngày.
  4. Khả năng tự sao lưu của DBMS: Kiểm tra hệ quản trị cơ sở dữ liệu đang sử dụng có cho phép thực hiện backup định kỳ không và cân nhắc sử dụng.

Leave a Reply