Hướng dẫn backup database postgresql

  •    Giới thiệu pg_basebackup
  •    Đặc điểm của pg_basebackup
  •    Bài toán
  •    Các bước tiến hành
    •    Backup PostgreSQL không nén
    •    Backup PostgreSQL và nén bản backup 
    •    Backup cả WAL file sinh ra trong quá trình backup
    • Bài viết liên quan

   Giới thiệu pg_basebackup

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. Tức là trạng thái của các file trong bản backup là giống nhau, và cùng tại thời điểm thực hiện backup. Các bạn có thể đọc bài viết sau để hiểu rõ hơn khái niệm này.

   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

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

   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:

   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

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

Hiện tại, tôi có tổ chức đều đặn các khóa học về quản trị Oracle Database, tôi sẽ để thông tin ở đây để bạn nào quan tâm về lịch học cũng như chương trình học có thể theo dõi nhé.

    KHÓA HỌC: QUẢN TRỊ ORACLE DATABASE THẬT LÀ ĐƠN GIẢN  Xem ngay!

   Hãy tham gia group “Kho tài liệu kiến thức database” để cùng học hỏi và chia sẻ nhé.

  • About
  • Latest Posts

Hướng dẫn backup database postgresql