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

Backup postgresql databases trên Ubuntu vps

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 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 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 được 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ực tế, 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 ý các yêu cầu xác thực tương tự đối với pg_dump cũng tồn tại 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 các bãi chứa dữ liệu 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ể dùng chuyển hướng lệnh, với đầu vào là file backup:

psql empty_database < backup_file

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 đưa ra 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 cấp quyền đối với 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. Nhưng ta có thể muốn khác đi.

Ví dụ 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, khi đó để ta có thể fix lỗi rồi tiếp tục restore.

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

Lựa chọn ra sao với lỗi là tùy thuộc vào mức độ quan trọng của dữ liệu của bạn khi lỗi!

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 mọi kế hoạch lưu trữ dữ liệu. 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. 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.
Bạn hãy chú ý kế hoạch sao lưu, kẻo nhiều trường hợp đáng tiếc xảy ra, rồi theo kiểu mất bò mới lo làm chuồng thì đã muộn. Chúc bạn thành công!


Tags:

Các tin trước

Sử dụng Cron để tự động hóa các công việc việc trên server 2013-08-23
Bảo mật postgresql trên Ubuntu vps 2013-08-22
Sử dụng sftp-to-securely-transfer-files với remote-server 2013-08-13
Quản trị packages trong Ubuntu và Debian với apt-get-apt-cache 2013-08-06
Sử dụng roles và quản lý cấp quyền trong postgresql trên vps 2013-08-05
Lệnh truy vấn SQL trong postgresql sử dụng select 2013-08-02
Các lệnh truy cấn quản lý bảng dữ liệu trong postgresql trên cloud-server 2013-08-01
Bảo mật MySQL và MariaDB Databases trên Linux VPS 2013-07-23
Cài đặt Firewall với UFW trên Ubuntu và Debian Cloud Server 2013-06-25
Cơ bản nhất về MYSQL trên Ubuntu CentOS 2012-06-12