Thứ tư, 28/08/2013 | 00:00 GMT+7

Cách sao lưu cơ sở dữ liệu PostgreSQL trên VPS Ubuntu

PostgreSQL là một hệ quản trị database hiện đại. Nó thường được sử dụng để lưu trữ và thao tác thông tin liên quan đến các trang web và ứng dụng. Như với bất kỳ loại dữ liệu có giá trị nào, điều quan trọng là phải thực hiện một kế hoạch sao lưu để bảo vệ khỏi mất mát dữ liệu. Hướng dẫn này sẽ trình bày một số cách thực tế mà bạn có thể sao lưu dữ liệu PostgreSQL của bạn .

Ta sẽ sử dụng VPS Ubuntu 12.04 với PostgreSQL 9.1. Hầu hết các bản phân phối hiện đại và các version gần đây của PostgreSQL sẽ hoạt động theo cách tương tự.

Cách sao lưu database PostgreSQL bằng pg_dump

PostgreSQL bao gồm một tiện ích gọi là " pg_dump " được dùng để kết xuất thông tin database vào một file cho mục đích sao lưu.

Tiện ích pg_dump được chạy từ dòng lệnh Linux. Cú pháp cơ bản của lệnh là:

pg_dump name_of_database > name_of_backup_file

Lệnh phải được chạy bởi user có quyền để đọc tất cả thông tin database , vì vậy nó thường được chạy với quyền là superuser.

Đối với một ví dụ trong thế giới thực, ta có thể đăng nhập vào user "postgres" và thực thi lệnh trên database mặc định, còn gọi là "postgres":

sudo su - postgres
pg_dump postgres > postgres_db.bak

Lệnh này thực sự là một client PostgreSQL, vì vậy nó có thể được chạy từ một hệ thống từ xa miễn là hệ thống đó có quyền truy cập vào database .

Nếu bạn muốn sao lưu một hệ thống từ xa, bạn có thể chuyển cờ "-h" để chỉ định server từ xa và cờ "-p" để cung cấp cho cổng từ xa:

pg_dump -h remote_host -p remote_port name_of_database > name_of_backup_file

Bạn cũng có thể chỉ định một user khác bằng cách sử dụng tùy chọn "-U" nếu cần. Cú pháp sẽ là:

pg_dump -U user_name -h remote_host -p remote_port name_of_database > name_of_backup_file

Lưu ý pg_dump cũng tồn tại các yêu cầu xác thực tương tự như đối với bất kỳ client nào khác. Điều này nghĩa là bạn phải đảm bảo thông tin đăng nhập của bạn hợp lệ cho các hệ thống mà bạn đang cố gắng sao lưu.

Cách khôi phục Data Dumps từ pg_dump bằng PostgreSQL

Để khôi phục bản sao lưu được tạo bởi pg_dump, bạn có thể chuyển hướng file thành đầu vào chuẩn psql :

psql empty_database < backup_file

Lưu ý: hoạt động chuyển hướng này không tạo database được đề cập. Điều này phải được thực hiện trong một bước riêng biệt trước khi chạy lệnh.

Ví dụ: ta có thể tạo một database mới được gọi là "restore_database" và sau đó chuyển hướng một kết xuất có tên "database.bak" bằng cách phát hành các lệnh sau:

createdb -T template0 restored_database
psql restored_database < database.bak

Database trống nên được tạo bằng cách sử dụng "template0" làm cơ sở.

Một bước khác phải được thực hiện để khôi phục chính xác là tạo lại mọi user sở hữu hoặc có quyền cấp trên các đối tượng trong database .

Ví dụ: nếu database của bạn có một bảng thuộc sở hữu của user "test_user", bạn sẽ phải tạo nó trên hệ thống khôi phục trước khi nhập:

createuser test_user
psql restored_database < database.bak

Xử lý lỗi khôi phục

Theo mặc định, PostgreSQL sẽ cố gắng tiếp tục khôi phục database , ngay cả khi nó gặp lỗi trên đường đi.

Trong nhiều trường hợp, điều này là không mong muốn vì những lý do rõ ràng. Có thể khó khăn khi cố gắng sắp xếp các thao tác cần thiết để khôi phục database về trạng thái thích hợp của nó.

Ta có thể yêu cầu PostgreSQL dừng bất kỳ lỗi nào bằng lệnh :

psql --set ON_ERROR_STOP=on restored_database < backup_file

Điều này sẽ khiến hoạt động khôi phục PostgreSQL tạm dừng ngay lập tức khi gặp lỗi.

Điều này sẽ vẫn để lại cho bạn một database bị tê liệt chưa được khôi phục hoàn toàn, nhưng giờ đây bạn có thể xử lý các lỗi khi chúng xuất hiện thay vì xử lý một danh sách các lỗi ở cuối.

Tùy chọn tốt hơn trong nhiều trường hợp có thể là tùy chọn "-1" (số một) hoặc "- giao dịch đơn lẻ":

psql -1 restored_database < backup_file

Tùy chọn này thực hiện tất cả các chi tiết khôi phục trong một giao dịch duy nhất.

Sự khác biệt giữa tùy chọn này và cài đặt "ON_ERROR_STOP" là tùy chọn này sẽ thành công hoàn toàn hoặc không nhập bất kỳ thứ gì.

Đây có thể là một sự đánh đổi tốn kém đối với những phục hình lớn hơn, nhưng trong nhiều trường hợp, lợi ích của việc bạn không để lại database được khôi phục một phần lớn hơn rất nhiều so với chi phí đó.

Cách sao lưu & khôi phục tất cả database trong PostgreSQL

Để tiết kiệm thời gian, nếu bạn muốn sao lưu tất cả database trong hệ thống của bạn , có một tiện ích được gọi là " pg_dumpall ".

Cú pháp của lệnh này rất giống với lệnh pg_dump thông thường, nhưng nó không chỉ định database . Thay vào đó, lệnh sao lưu mọi database có sẵn:

pg_dumpall > backup_file

Bạn có thể khôi phục database bằng cách chuyển file sang psql, với database mặc định:

psql -f backup_file postgres

Kết luận

Bản sao lưu là một thành phần thiết yếu trong bất kỳ loại kế hoạch lưu trữ dữ liệu nào. May mắn là PostgreSQL cung cấp cho bạn các tiện ích cần thiết để sao lưu hiệu quả các thông tin quan trọng của bạn.

Như với bất kỳ loại sao lưu nào, điều quan trọng là phải kiểm tra các bản sao lưu của bạn thường xuyên đảm bảo các bản sao được tạo có thể được khôi phục một cách chính xác. Các bản sao lưu bạn tạo chỉ hữu ích nếu chúng thực sự được dùng để khôi phục hệ thống của bạn.

Bởi Justin Ellingwood

Tags:

Các tin trước

Cách bảo mật PostgreSQL trên VPS Ubuntu 2013-08-22
Cách sử dụng vai trò và quản lý quyền cấp trong PostgreSQL trên VPS 2013-08-05
Cách sử dụng vai trò và quản lý quyền cấp trong PostgreSQL trên VPS 2013-08-05
Cách tạo truy vấn dữ liệu trong PostgreSQL bằng cách sử dụng lệnh chọn 2013-08-02
Cách tạo, xóa & quản lý bảng trong PostgreSQL trên server cloud 2013-08-01