0
0
Lập trình
Admin Team
Admin Teamtechmely

Thiết lập sao lưu gia tăng với PostgreSQL - Phần 1

Đăng vào 1 tuần trước

• 9 phút đọc

🧭 Giới thiệu

PostgreSQL là một hệ thống quản lý cơ sở dữ liệu mạnh mẽ, đáng tin cậy và được sử dụng rộng rãi trong thế giới phát triển. Nó tuân thủ các tiêu chuẩn SQL, mã nguồn mở và quan trọng nhất, nó giúp bảo vệ dữ liệu của chúng ta.

Tuy nhiên, ngay cả công cụ tốt nhất cũng không thể bảo vệ bạn khỏi một lệnh sai, một lỗi hoặc sự cố máy chủ. Đó là lúc mà đồng minh tốt nhất của chúng ta xuất hiện: sao lưu.

Trong hướng dẫn này, chúng ta sẽ khám phá cách cấu hình sao lưu gia tăng trên PostgreSQL.

Mục tiêu? Cho dù bạn là nhà phát triển, quản trị viên, sinh viên, hay chỉ đơn giản là người tò mò, bạn sẽ có thể thiết lập một hệ thống sao lưu tự động, hiệu quả và an tâm.

Dưới đây là những gì chúng ta sẽ đề cập:

  • Hiểu sao lưu là gì (và sao lưu gia tăng có nghĩa là gì 🧠)
  • Khám phá các công cụ tích hợp của PostgreSQL 🔧
  • Cấu hình từng bước hệ thống sao lưu gia tăng 🛠️
  • Tự động hóa quy trình với các tập lệnh và cron
  • Và thậm chí kiểm tra phục hồi (bởi vì một bản sao lưu chưa được kiểm tra chỉ là ảo tưởng về sự an toàn 😉)

Sẵn sàng chưa? Hãy bắt đầu với những điều cơ bản. 👇

🧠 Nhắc nhở: Sao lưu là gì (và sao lưu gia tăng là gì)?

Trước khi đi vào cấu hình, hãy dành một chút thời gian để xác lập nền tảng vì sự hiểu biết tốt đã là một nửa công việc.

🔐 Sao lưu là gì?

Sao lưu đơn giản là một bản sao của dữ liệu (tệp, cơ sở dữ liệu, cấu hình, v.v.) được lưu trữ tách biệt, ở một nơi an toàn, để chúng ta có thể khôi phục nó nếu có vấn đề xảy ra: lỗi do con người, sự cố, tấn công hoặc chỉ là một “Ôi, tôi đã xóa mọi thứ.”

🧱 3 loại sao lưu chính

Có nhiều cách để sao lưu dữ liệu. Dưới đây là ba loại phổ biến nhất:

  • Sao lưu đầy đủ: bạn sao chép tất cả các tệp mỗi lần. Nó đơn giản nhưng có thể nhanh chóng trở nên nặng nề về dung lượng lưu trữ.

  • Sao lưu chênh lệch: bạn chỉ sao chép các tệp đã thay đổi kể từ lần sao lưu đầy đủ cuối cùng. Nó nhẹ hơn, nhưng theo thời gian nó tích lũy.

  • Sao lưu gia tăng: bạn sao chép các tệp đã thay đổi kể từ lần sao lưu cuối cùng, bất kể loại nào (toàn bộ hay gia tăng). Đây là phương pháp tối ưu nhất về kích thước và thời gian nhưng hơi khó quản lý hơn.

📌 Tại sao sao lưu gia tăng lại tuyệt vời?

Bởi vì chúng giúp bạn tiết kiệm thời gian và không gian trong khi vẫn giữ được lịch sử thay đổi. Và tin tốt là: PostgreSQL hỗ trợ loại sao lưu này nhờ vào một cơ chế tích hợp gọi là Ghi log trước (Write-Ahead Logging) (WAL).

👉 Đó chính xác là những gì chúng ta sẽ sử dụng trong hướng dẫn này.

🔍 PostgreSQL xử lý sao lưu gia tăng như thế nào?

Hãy bắt đầu bằng cách xem xét các loại sao lưu mà PostgreSQL cung cấp để chúng ta có thể hiểu các cơ chế có sẵn trước khi đi sâu vào sao lưu gia tăng.

🧬 Các loại sao lưu trong PostgreSQL

PostgreSQL cung cấp ba tùy chọn sao lưu 👇:

1. Sao lưu đầy đủ

Điều này bao gồm việc sao chép toàn bộ cơ sở dữ liệu tại một thời điểm cụ thể. Nó là một bức ảnh của cơ sở dữ liệu và cho phép phục hồi về trạng thái chính xác của nó khi sao lưu được thực hiện. Các công cụ như pg_basebackup hoặc sao chép tệp thủ công có thể được sử dụng cho điều này.

2. Sao lưu logic (pg_dump)

Điều này sử dụng công cụ pg_dump để xuất cơ sở dữ liệu dưới dạng một tập lệnh SQL. Đây là một hình thức sao lưu đầy đủ cho phép bạn khôi phục cơ sở dữ liệu độc lập với cấu trúc vật lý của PostgreSQL. Nó thường được sử dụng cho việc di chuyển hoặc sao lưu có mục tiêu (ví dụ: một bảng hoặc lược đồ). Tuy nhiên, nó có những hạn chế đối với sao lưu gia tăng, vì nó không bao gồm các nhật ký giao dịch WAL.

3. Sao lưu gia tăng (dựa trên WAL)

Sao lưu gia tăng chỉ lưu lại những thay đổi được thực hiện kể từ lần sao lưu cuối cùng (dù là đầy đủ hay gia tăng). Nó dựa vào việc lưu trữ các tệp WAL (Ghi log trước) được tạo bởi PostgreSQL. Những tệp này ghi lại mọi giao dịch được áp dụng cho cơ sở dữ liệu. Sử dụng chúng, bạn có thể khôi phục cơ sở dữ liệu về một thời điểm chính xác, đạt được RPO (Mục tiêu Điểm Khôi phục) rất thấp, thường chỉ vài phút. Điều này liên quan đến việc giảm thiểu lượng dữ liệu bạn sẵn sàng mất sau một sự cố.

🧪 Về sao lưu gia tăng

Tính năng chính của PostgreSQL cho sao lưu gia tăng là Ghi log trước (WAL).
Mỗi hoạt động ghi trên cơ sở dữ liệu được ghi lại trong các tệp nhật ký đặc biệt. Những tệp này ghi lại các thay đổi đối với cơ sở dữ liệu trước khi chúng thực sự được áp dụng, đảm bảo tính toàn vẹn của dữ liệu.
Cơ chế này, được gọi là WAL, cho phép khôi phục trạng thái của cơ sở dữ liệu tại một thời điểm cụ thể, một kỹ thuật gọi là Khôi phục theo Thời gian (Point In Time Recovery - PITR). Điều này có nghĩa là sau một sao lưu đầy đủ ban đầu, bạn có thể khôi phục cơ sở dữ liệu về bất kỳ thời điểm nào bằng cách phát lại các tệp WAL được tạo ra kể từ lần sao lưu đó.
Đó chính xác là những gì chúng ta sẽ tận dụng trong cấu hình của mình với Barman.

⚙️ Cách thức hoạt động của WAL

Khi lưu trữ WAL được bật, PostgreSQL sẽ tạo các tệp nhật ký trong một thư mục cụ thể (/var/lib/postgresql/{version}/main/pg_wal/) với mỗi hoạt động ghi. Những tệp này sẽ được xoay vòng khi chúng đạt 16 MB (mặc định).
Mỗi khi một tệp WAL được tạo hoặc sửa đổi, PostgreSQL có thể chạy một lệnh tùy chỉnh, cho phép tập trung hóa việc lưu trữ WAL và đơn giản hóa việc phục hồi.

Barman tận dụng những tệp WAL này để quản lý sao lưu gia tăng và phục hồi theo thời gian.

🚀 Barman là gì?

🍹 Giới thiệu về Barman

Barman (Quản lý Sao lưu và Phục hồi) là một công cụ dựa trên Python giúp đơn giản hóa các hoạt động sao lưu và phục hồi cho PostgreSQL.
Nó giúp:

  • Lập lịch và tự động hóa sao lưu
  • Quản lý sao lưu đầy đủ và gia tăng
  • Thực hiện Khôi phục theo Thời gian (PITR) sử dụng các tệp WAL

Nó đặc biệt hữu ích cho việc quản lý nhiều máy chủ PostgreSQL và tập trung hóa các hoạt động sao lưu/phục hồi.

Chúng ta sẽ cấu hình và sử dụng công cụ này trong bài viết này.

🤔 Barman so với pg_dump

Trước khi đi xa hơn, hãy so sánh Barman với các công cụ sao lưu PostgreSQL truyền thống: pg_dump / pg_basebackup.

  • pg_dump / pg_basebackup: Những công cụ này thực hiện sao lưu đầy đủ, xuất trạng thái của cơ sở dữ liệu (ví dụ: dưới dạng một tập lệnh SQL). Tuy nhiên, chúng có giới hạn khi phục hồi thảm họa nhanh chóng, vì chúng chỉ phục hồi về thời điểm chính xác khi sao lưu được thực hiện.
    Giả sử bạn chạy pg_dump hàng đêm vào lúc 3 giờ sáng, và một sự cố xảy ra vào lúc 6 giờ chiều. Bạn sẽ mất tất cả các thay đổi được thực hiện kể từ 3 giờ sáng 15 giờ mất dữ liệu, điều này không thể chấp nhận trong hầu hết các kịch bản kinh doanh.

  • Barman: Không giống như pg_dump, Barman hoạt động ở cấp độ vật lý. Nó xử lý sao lưu đầy đủ và gia tăng, sử dụng các tệp WAL để khôi phục bất kỳ thay đổi nào kể từ lần sao lưu cuối cùng. Điều này cho phép RPO thấp, giảm thiểu mất dữ liệu chỉ còn vài phút.
    Tất nhiên, nó yêu cầu nhiều không gian lưu trữ hơn, nhưng sự đánh đổi này là hoàn toàn xứng đáng cho sự an toàn và khả năng phục hồi dữ liệu.

📦 Cài đặt Barman

Trước khi sử dụng Barman, hãy đảm bảo rằng PostgreSQL đã được cài đặt đúng cách.
Người dùng Ubuntu có thể tham khảo hướng dẫn này, và người dùng CentOS/RHEL có thể tham khảo hướng dẫn này.

Khi PostgreSQL đã sẵn sàng, chúng ta sẽ xem xét cấu hình nâng cao. Nhưng trước tiên, hãy cài đặt Barman:

a. Trên Ubuntu/Debian

Trên các hệ thống dựa trên Debian như Ubuntu, cài đặt Barman từ các kho lưu trữ chính thức:

  1. Cài đặt từ kho lưu trữ:

    Copy
    $ sudo apt update
    $ sudo apt install barman
  2. Kiểm tra cài đặt:

    Khi cài đặt hoàn tất, hãy kiểm tra rằng Barman đã được cài đặt đúng cách bằng cách chạy lệnh sau:

    Copy
    $ barman --version

b. Trên CentOS/RHEL

Trên CentOS hoặc RHEL, bạn phải thêm kho lưu trữ chính thức của Barman trước khi cài đặt.

  1. Thêm kho lưu trữ chính thức của Barman:

    Copy
    $ sudo yum install -y https://dl.enterprisedb.com/barman/barman-2.16.0-1.rhel7.x86_64.rpm
  2. Cập nhật các gói hệ thống và cài đặt Barman:

    Copy
     $ sudo yum update
     $ sudo yum install barman
  3. Kiểm tra cài đặt Barman:

    Copy
     $ barman --version

🧾 Kết luận

Trong bài viết này, chúng ta đã khám phá những khái niệm cơ bản cần thiết để triển khai sao lưu gia tăng trong PostgreSQL, tập trung vào vai trò quan trọng của nhật ký giao dịch (WAL) và cơ chế PITR. Chúng ta cũng đã thấy cách mà Barman, công cụ quản lý sao lưu và phục hồi, tích hợp một cách liền mạch vào quy trình này.

Mục tiêu là cung cấp một hiểu biết rõ ràng về những gì sao lưu gia tăng liên quan đến trong PostgreSQL trước khi đi vào cấu hình kỹ thuật chính nó. Với nền tảng này, bạn đã có một cái nhìn rộng hơn về những thách thức và công cụ cần thiết cho việc quản lý sao lưu hiệu quả.

Trong Phần 2, chúng ta sẽ đi sâu vào cốt lõi của vấn đề với cấu hình hoàn chỉnh của Barman từ cài đặt đến việc kích hoạt sao lưu gia tăng. Chúng ta cũng sẽ đề cập đến các phương pháp tốt nhất để đảm bảo tính liên tục và độ tin cậy của các bản sao lưu của bạn.

Hãy theo dõi bài viết tiếp theo để tìm hiểu cách cấu hình và tự động hóa các bản sao lưu của bạn một cách hiệu quả.

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào