CodeGym /Các khóa học /SQL SELF /Tạo bản sao lưu cơ bản với pg_dump

Tạo bản sao lưu cơ bản với pg_dump

SQL SELF
Mức độ , Bài học
Có sẵn

pg_dump là một công cụ dòng lệnh do PostgreSQL cung cấp, cho phép xuất cơ sở dữ liệu ra file backup. File này có thể chứa chỉ cấu trúc database, chỉ dữ liệu, hoặc cả hai.

Điểm mạnh chính của pg_dump là nó cho phép chuyển dữ liệu giữa các server, khôi phục database sau khi bị lỗi hoặc đơn giản là tạo archive để lưu trữ lâu dài. Lưu ý là tiện ích này phù hợp hơn cho backup logic (dùng các truy vấn SQL) thay vì copy vật lý các file database.

Cú pháp cơ bản của lệnh pg_dump

Để tạo bản sao lưu bằng pg_dump, chỉ cần chạy lệnh sau trong terminal:

pg_dump -U username -d database_name -f backup_file.sql

Giải thích các thành phần của lệnh:

  • -U username — chỉ định tên user PostgreSQL dùng để kết nối tới database.
  • -d database_name — đặt tên database mà bạn muốn backup.
  • -f backup_file.sql — xác định nơi lưu file backup. Có thể là đường dẫn đầy đủ hoặc tương đối.

Ví dụ: giả sử bạn có database university và muốn tạo bản backup vào file university_backup.sql. Lệnh sẽ như sau:

pg_dump -U postgres -d university -f university_backup.sql

Lúc này PostgreSQL sẽ hỏi mật khẩu của user postgres để cho phép truy cập dữ liệu.

Mẹo: nếu bạn làm việc với server local và không muốn nhập mật khẩu mỗi lần, hãy cấu hình file .pgpass. Đọc thêm tài liệu chính thức của PostgreSQL để biết hướng dẫn chi tiết.

Tham số và cách sử dụng

Tiện ích pg_dump rất linh hoạt và có thể cấu hình để tạo backup với nhiều tuỳ chọn khác nhau:

  1. Tạo backup chỉ cấu trúc database

Nếu bạn chỉ muốn lưu cấu trúc database (ví dụ để triển khai trên server mới), dùng flag --schema-only. Ví dụ lệnh:

pg_dump -U postgres -d university --schema-only -f university_schema.sql

Lệnh này sẽ tạo script SQL chỉ chứa các lệnh CREATE TABLE, CREATE INDEX v.v., không có dữ liệu.

  1. Tạo backup chỉ dữ liệu

Đôi khi bạn chỉ cần lưu dữ liệu, không cần cấu trúc. Khi đó dùng flag --data-only:

pg_dump -U postgres -d university --data-only -f university_data.sql

File kết quả sẽ chứa các lệnh INSERT INTO để khôi phục dữ liệu của bạn.

  1. Nén bản sao lưu

File backup tạo ra có thể khá lớn, nhất là khi database có nhiều bảng và dữ liệu. Để giảm kích thước file, dùng tham số --compress:

pg_dump -U postgres -d university -f university_backup.sql --compress=6

Mức nén được chỉ định bằng số từ 0 (không nén) đến 9 (nén tối đa). Lưu ý mức nén cao hơn sẽ tốn nhiều thời gian backup hơn.

  1. Xuất ra định dạng nhị phân

Nếu bạn muốn khôi phục nhanh hơn, có thể lưu backup ở định dạng nhị phân thay vì script SQL dạng text:

pg_dump -U postgres -d university -Fc -f university_backup.dump

Tham số -Fc chỉ định định dạng Custom, hỗ trợ khôi phục bằng tiện ích pg_restore.

Ví dụ tạo bản sao lưu

Backup toàn bộ database

Giả sử bạn có database company và muốn backup toàn bộ, gồm cả cấu trúc lẫn dữ liệu:

pg_dump -U postgres -d company -f company_backup.sql

Backup một bảng

Nếu bạn chỉ muốn lưu một bảng từ database, dùng tham số -t:

pg_dump -U postgres -d company -t employees -f employees_backup.sql

File này sẽ chứa cấu trúc và dữ liệu chỉ của bảng employees.

Backup nhiều bảng

Để backup nhiều bảng, thêm nhiều tham số -t:

pg_dump -U postgres -d company -t employees -t departments -f selected_tables_backup.sql

Backup đã nén

Để tiết kiệm dung lượng, dùng flag --compress hoặc tạo file ở định dạng nén luôn:

pg_dump -U postgres -d company -Fc -f company_backup_compressed.dump

Một số khuyến nghị hữu ích

Kiểm tra kích thước file backup. Nếu file backup quá nhỏ, có thể đã xảy ra lỗi. Dùng tham số --verbose để xem thông tin chi tiết về quá trình backup.

Tự động hóa quá trình. Dùng cron hoặc pg_cron để lên lịch backup định kỳ. Đừng quên xoay vòng backup cũ đúng cách để tránh đầy ổ cứng.

Kiểm tra bản sao lưu có hợp lệ không. Hãy test backup bằng cách khôi phục database trên server test.

Lỗi bạn có thể gặp phải

Lỗi xác thực. Nếu bạn nhập sai user hoặc quên mật khẩu, pg_dump sẽ báo lỗi. Đảm bảo đã cấu hình file .pgpass để tự động đăng nhập.

Lỗi kết nối. Nếu server PostgreSQL chưa chạy hoặc bạn nhập sai tên database, tiện ích sẽ không thể tạo backup. Kiểm tra lại tên database và trạng thái server.

Vấn đề quyền truy cập. User mà bạn dùng để chạy pg_dump phải có quyền đọc cấu trúc và dữ liệu database. Nếu được, hãy dùng role admin.

Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION