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é.