pg_basebackup là một công cụ backup đơn giản được cung cấp bởi PostgreSQL. Trong bài này, tôi sẽ hướng dẫn các bạn sử dụng nó.


   Đặc điểm của pg_basebackup

   pg_basebackup có thể chạy trong khi database cluster vẫn đang hoạt động. Nói cách khác, người dùng vẫn sử dụng PostgreSQL bình thường trong thời gian backup bằng pg_basebackup.

   pg_basebackup tạo ra 1 bản copy cho tất cả các file trong data directory của database cluster.

   Bản backup được tạo ra bởi pg_basebackup là consistent.

Đọc thêm  Các thuật ngữ thường dùng trong chiến lược backup database
   pg_basebackup chỉ có thể backup cho toàn bộ database cluster, chứ không backup cho từng database riêng lẻ được.

   Bản backup do pg_basebackup không sử dụng cho các kiến trúc khác nhau được. Ví dụ: backup PostgreSQL từ Linux không restore cho Windows được

Để backup cho từng database riêng lẻ, bạn phải sử dụng pg_dump

Đọc thêm  Export Import dữ liệu cơ bản bằng pg_dump trong PostgreSQL
   pg_basebackup có thể được sử dụng để khôi phục dữ liệu theo phương thức Point-in-time Recovery

   pg_basebackup sử dụng trong việc xây dựng các hệ thống replication của PostgreSQL (Log shipping hay Streaming Replication).


   Bài toán

Tôi có một PostgreSQL Database cluster chạy phiên bản PostgreSQL 13 như sau:

postgres=# \l
                                        List of databases
      Name      |   Owner   | Encoding |   Collate   |    Ctype    |      Access privileges       
----------------+-----------+----------+-------------+-------------+------------------------------
 dwh            | postgres  | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres                +
                |           |          |             |             | postgres=CTc/postgres       +
                |           |          |             |             | dwh_test=CTc/postgres
 postgres       | postgres  | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =Tc/postgres                +
                |           |          |             |             | postgres=CTc/postgres       +

 template0      | postgres  | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres                 +
                |           |          |             |             | postgres=CTc/postgres
 template1      | postgres  | UTF8     | en_US.UTF-8 | en_US.UTF-8 | =c/postgres                 +
                |           |          |             |             | postgres=CTc/postgres
(4 rows)

Tôi cần backup database cluster này để đề phòng trường hợp có sự cố xảy ra, có thể sử dụng bản backup này để khôi phục lại.


   Các bước tiến hành

   Backup PostgreSQL không nén

pg_basebackup -D /var/lib/pgsql/13/backup

Với câu lệnh backup như trên, toàn bộ file trong data directory (PGDATA) sẽ được copy vào thư mục backup.

Nếu bạn muốn hiển thị tiến trình backup đang đến đâu, hãy thêm option -P

pg_basebackup -D /var/lib/pgsql/13/backup -P

Chú ý: Rất nhiều bạn gặp lỗi này khi backup:

pg_basebackup: error: directory "..." exists but is not empty
pg_basebackup: removing contents of data directory "/var/lib/pgsql/13/backup"

Mình có làm 1 bài giải thích nguyên nhân và cách khắc phục tại đây:

Đọc thêm  pg_basebackup: error: directory exists but is not empty

   Backup PostgreSQL và nén bản backup 

pg_basebackup -D /var/lib/pgsql/13/backup -Ft -z

Trong đó: Option -Ft để chỉ ra format lưu file backup là tar, -z để nén bản backup lại

   Backup cả WAL file sinh ra trong quá trình backup

Để đảm bảo bản backup của các bạn chứa những file WAL được sinh ra trong quá trình backup, bạn có thể thêm option -Xf như sau:

pg_basebackup -D /var/lib/pgsql/13/backup -Ft -z -Xf

Với option này thời gian backup tuy sẽ kéo dài hơn, nhưng bản backup của bạn có thể đảm bảo việc khôi phục khi cần được.

Ở những bài viết sau, tôi sẽ hướng dẫn các bạn các cách để khôi phục lại database từ bản backup pg_basebackup

Đọc thêm  Restore database PostgreSQL ở chế độ No Archive mode
Đọc thêm  Restore Point in Time Recovery database PostgreSQL

Nguồn: https://dangxuanduy.com/

Xin cho tôi được biết, bạn cảm thấy bài viết này như thế nào? Ý kiến của bạn sẽ giúp tôi nâng cao chất lượng bài viết của mình.

    Hãy chia sẻ bài viết này nếu bạn thấy có ích nhé
    0 0 votes
    Article Rating
    Subscribe
    Notify of
    guest
    0 Comments
    Inline Feedbacks
    View all comments