Khi làm việc với cơ sở dữ liệu PostgreSQL, việc sao lưu (backup) và phục hồi (restore) dữ liệu là vô cùng quan trọng, đặc biệt khi bạn cần di chuyển dữ liệu từ một môi trường này sang một môi trường khác hoặc bảo vệ dữ liệu của mình trước các sự cố. Hai công cụ chính hỗ trợ cho việc sao lưu và phục hồi dữ liệu trong PostgreSQL là pg_dumppg_restore.

Bài viết này sẽ hướng dẫn chi tiết cách sử dụng pg_dump để sao lưu dữ liệu và pg_restore để phục hồi dữ liệu trong PostgreSQL. Qua đó, bạn sẽ có thể dễ dàng chuyển đổi dữ liệu giữa các hệ thống hoặc khôi phục dữ liệu khi cần thiết.


1. Công Cụ pg_dump Trong PostgreSQL

pg_dump là một công cụ dùng để tạo ra bản sao lưu dữ liệu từ một cơ sở dữ liệu PostgreSQL. Điều đặc biệt là pg_dump tạo ra bản sao không bị khóa, có nghĩa là bạn có thể tạo bản sao lưu ngay cả khi cơ sở dữ liệu đang hoạt động mà không làm gián đoạn hệ thống.

1.1 Cách Cài Đặt pg_dump

Thông thường, pg_dump được cài đặt sẵn khi bạn cài đặt PostgreSQL. Bạn có thể kiểm tra phiên bản của pg_dump để đảm bảo nó đã được cài đặt đúng cách:

pg_dump --version

Nếu bạn chưa có PostgreSQL cài đặt, bạn có thể tải về và cài đặt nó từ trang chủ PostgreSQL: https://www.postgresql.org/download/

1.2 Cách Sử Dụng pg_dump

1.2.1 Sao Lưu Dữ Liệu Đơn Giản

Để sao lưu một cơ sở dữ liệu đơn giản, bạn có thể sử dụng cú pháp sau:

pg_dump -U [tên_user] -d [tên_database] -F c -f [đường_dẫn_đến_file_backup]
  • -U: Tên người dùng PostgreSQL.
  • -d: Tên cơ sở dữ liệu.
  • -F c: Định dạng file sao lưu (c là định dạng custom).
  • -f: Đường dẫn lưu file sao lưu.

Ví dụ:

pg_dump -U postgres -d mydatabase -F c -f /backups/mydatabase.backup

Lệnh này sẽ tạo ra một file sao lưu dưới định dạng custom có tên là mydatabase.backup ở đường dẫn /backups.

1.2.2 Sao Lưu Cả Cơ Sở Dữ Liệu Lớn

Đối với các cơ sở dữ liệu lớn, bạn có thể dùng tham số -j để tăng tốc độ bằng cách chạy song song nhiều quá trình:

pg_dump -U postgres -d mydatabase -F c -j 4 -f /backups/mydatabase.backup

Trong lệnh này, -j 4 chỉ ra rằng pg_dump sẽ sử dụng 4 luồng xử lý song song.

1.2.3 Sao Lưu Chỉ Một Số Bảng

Nếu bạn chỉ muốn sao lưu một số bảng cụ thể trong cơ sở dữ liệu, bạn có thể sử dụng tham số -t:

pg_dump -U postgres -d mydatabase -t table1 -t table2 -F c -f /backups/mydatabase_tables.backup

Thao tác này sẽ sao lưu hai bảng table1table2 trong cơ sở dữ liệu mydatabase.

1.2.4 Sao Lưu Chỉ Dữ Liệu (Không Bao Gồm Cấu Trúc)

Đôi khi bạn chỉ cần sao lưu dữ liệu mà không cần sao lưu cấu trúc bảng, có thể sử dụng tham số -a để chỉ xuất dữ liệu:

pg_dump -U postgres -d mydatabase -a -F c -f /backups/mydatabase_data.backup

2. Công Cụ pg_restore Trong PostgreSQL

pg_restore là công cụ được sử dụng để phục hồi dữ liệu từ bản sao lưu đã tạo ra bằng pg_dump. Nó cho phép bạn khôi phục toàn bộ cơ sở dữ liệu hoặc chỉ một số bảng cụ thể.

2.1 Cách Cài Đặt pg_restore

Tương tự như pg_dump, pg_restore cũng được cài đặt cùng với PostgreSQL. Bạn có thể kiểm tra phiên bản của pg_restore bằng lệnh sau:

pg_restore --version

2.2 Cách Sử Dụng pg_restore

2.2.1 Phục Hồi Toàn Bộ Cơ Sở Dữ Liệu

Để phục hồi toàn bộ cơ sở dữ liệu từ bản sao lưu, bạn sử dụng lệnh sau:

pg_restore -U [tên_user] -d [tên_database] -F c -v [đường_dẫn_đến_file_backup]
  • -U: Tên người dùng PostgreSQL.
  • -d: Tên cơ sở dữ liệu sẽ được khôi phục.
  • -F c: Định dạng của file sao lưu (custom).
  • -v: Hiển thị chi tiết quá trình phục hồi.

Ví dụ:

pg_restore -U postgres -d mydatabase -F c -v /backups/mydatabase.backup

Lệnh này sẽ khôi phục toàn bộ dữ liệu từ file mydatabase.backup vào cơ sở dữ liệu mydatabase.

2.2.2 Phục Hồi Chỉ Một Số Bảng

Nếu bạn chỉ muốn phục hồi một số bảng từ bản sao lưu, bạn có thể sử dụng tham số -t:

pg_restore -U postgres -d mydatabase -F c -t table1 -t table2 -v /backups/mydatabase.backup

Thao tác này sẽ chỉ phục hồi dữ liệu của hai bảng table1table2 từ bản sao lưu.

2.2.3 Phục Hồi Dữ Liệu Với Nhiều Luồng

Tương tự như pg_dump, pg_restore cũng hỗ trợ phục hồi với nhiều luồng xử lý bằng tham số -j:

pg_restore -U postgres -d mydatabase -F c -j 4 -v /backups/mydatabase.backup

Sử dụng -j 4 để sử dụng 4 luồng trong quá trình phục hồi dữ liệu.

2.2.4 Phục Hồi Dữ Liệu Mà Không Cấu Trúc

Nếu bạn chỉ muốn phục hồi dữ liệu mà không phục hồi cấu trúc bảng, bạn có thể dùng tham số -a:

pg_restore -U postgres -d mydatabase -F c -a -v /backups/mydatabase_data.backup

3. Một Số Tình Huống Thực Tế

3.1 Di Chuyển Dữ Liệu Từ Máy Chủ Cũ Sang Máy Chủ Mới

Một tình huống phổ biến khi sử dụng pg_dumppg_restore là di chuyển dữ liệu từ máy chủ PostgreSQL cũ sang máy chủ mới.

Bước 1: Sao lưu cơ sở dữ liệu trên máy chủ cũ bằng pg_dump.

pg_dump -U postgres -d mydatabase -F c -f /backups/mydatabase.backup

Bước 2: Sao chép file sao lưu sang máy chủ mới.

Bước 3: Phục hồi cơ sở dữ liệu trên máy chủ mới bằng pg_restore.

pg_restore -U postgres -d mydatabase -F c -v /backups/mydatabase.backup

4. Kết Luận

pg_dumppg_restore là hai công cụ không thể thiếu khi làm việc với cơ sở dữ liệu PostgreSQL. Chúng giúp bạn dễ dàng sao lưu và phục hồi dữ liệu trong nhiều tình huống khác nhau, từ sao lưu định kỳ đến di chuyển dữ liệu giữa các môi trường. Việc nắm vững cách sử dụng hai công cụ này sẽ giúp bạn bảo vệ và quản lý dữ liệu của mình một cách hiệu quả.