Mục lục
1. 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ó.
2. Đặ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).
3. 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.
4. Các bước tiến hành
1. 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:
2. 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
3. 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é.
KHOÁ DÀNH CHO NGƯỜI MỚI
KHÓA HỌC: QUẢN TRỊ ORACLE DATABASE THẬT LÀ ĐƠN GIẢN (ADMIN 1)
CÁC KHOÁ NÂNG CAO:
KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ KIẾN TRÚC MULTITENANT 12c
KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ HỆ THỐNG DATA GUARD
CÁC KHOÁ COMBO:
COMBO 1: ADMIN 1 + MULTITENANT 12c
COMBO 3: ADMIN 1 + MULTITENANT 12c + DATA GUARD
LỊCH HỌC:
Mời bạn xem tại đây: LỊCH HỌC CÁC LỚP ORACLE
ĐĂNG KÝ:
https://forms.gle/MtCAoRQFenP886y79
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é.