Trong bài này mình sẽ hướng dẫn cách backup và restore PostgreSQL Database trên VPS / Server Linux. Đây là hai thao tác cần thiết khi bạn quản trị dữ liệu của website.

Mọi thao tác mà mình hướng dẫn dưới đây đều thông qua command line, vì vậy bạn phải có kiến thức về quản trị VPS, cũng như biết cách đăng nhập vào VPS. Bạn có thể tham khảo một số bài viết dưới đây.

  • Cách dùng phần mềm PuTTY để quản lý VPS
  • Hướng dẫn truy cập vào VPS

Ok, ta bắt đầu bằng thao tác backup trước nhé.

1. Cách Backup PostgreSQL Database

PostgreSQL cung cấp công cụ pg_dump để giúp bạn backup database. Nó tạo ra một file database ở định dạng SQL nên dễ dàng khôi phục bằng các công cụ restore sql như PHPMyAdmin.

Bài viết này được đăng tại [free tuts .net]

Backup thành file txt thuần SQL

Để backup PostgreSQL Database thì trước tiên hãy đăng nhập bằng tài khoản có quyền truy cập server, sau đó chuyển sang dùng tài khoản Postgres và chạy lệnh pg_dump như sau (thay thế freetutsdb bằng tên của cơ sở dữ liệu bạn muốn backup).

$ pg_dump freetutsdb > freetutsdb.sql

Kết quả backup là một file sql chứa những câu lệnh T-SQL.

Backup thành file tùy chỉnh

Lệnh pg_dump cho phép bạn tùy chọn kiểu định dạng cho file database backup.

$ pg_dump -F c freetutsdb > freetutsdb.dump
OR
$ pg_dump -F t freetutsdb > freetutsdb.tar

Tùy chọn -F dùng để khai báo sử dụng tùy chọn định dạng trả về, c là file sẽ lưu trữ ở dạng tùy theo ý bạn, t là lưu trữ ở dạng tar. Tất cả các định dạng này đều có thể sử dụng để phục hồi với lệnh pg_restore.

Xem Thêm:   Học Git | Git toàn tập

Để tùy chỉnh định dạng file backup ở dạng thư mục thì bạn thêm cờ -f.

$ pg_dump -F d freetutsdb -f tecmintdumpdir

Backup tất cả database

Để backup tất cả PostgreSQL databases thì dùng lệnh pg_dumpall.

$ pg_dumpall > all_pg_dbs.sql

Backup database lớn

Nếu database của bạn cực lớn thì nên backup kết hợp với công cụ nén gzip hoặc một công cụ nén nào đó mà bạn thích. Dưới đây là ví dụ mình sử dụng công cụ gzip.

$ pg_dump freetutsdb | gzip > freetutsdb.gz

2. Cách Restore PostgreSQL Database

Để restore PostgreSQL Database thì bạn có thể sử dụng lệnh psql hoặc pg_restore.

  • Lệnh psql được sử dụng để khôi phục các file text được tạo bởi pg_dump, tức là file backup SQL thuần.
  • Lệnh pg_restore được sử dụng để khôi phục cơ sở dữ liệu PostgreSQL do pg_dump tạo ra ở định dạng tùy chỉnh.

Dưới đây là một ví dụ về cách restore file văn bản thuần túy:

$ psql freetutsdb < freetutsdb.sql

Còn đối với định dạng tùy chỉnh thì ta sử dụng lệnh pg_restore.

$ pg_restore -d freetutsdb freetutsdb.dump
OR
$ pg_restore -d freetutsdb freetutsdb.tar
OR
$ pg_restore -d freetutsdb tecmintdumpdir

3. Backup bằng cách remote vào PostgreSQL Database

pg_dump là một công cụ backup chạy ở client, và nó có hỗ trợ cho việc backup từ xa thông qua remote địa chỉ IP. Xem ví dụ dưới đây.

$ pg_dump -U tecmint -h 10.10.20.10 -p 5432 freetutsdb > freetutsdb.sql
  • Tham số -h chỉ định địa chỉ của máy chủ
  • Tham số -p chỉ định port kết nối
  • Tham số -U chỉ định tên user quản trị database
Xem Thêm:   Ổ cứng máy tính: Thương hiệu nào tốt, có những loại ổ cứng nào?

Bạn phải đảm bảo rằng người dùng remote có đủ các quyền để truy cập vào database đó, nếu không bạn sẽ nhận được lỗi như sau:

database connection error png

Ngoài ra, bạn cũng có thể dumb một database từ máy chủ này sang máy chủ khác bằng cách sử dụng cú pháp sau.

$ pg_dump -U tecmint -h 10.10.20.10 freetutsdb | pqsl -U tecmint -h 10.10.20.30 freetutsdb

Giải thích các tham số tương tự như trên.

4. Tự động backup PostgreSQL Database bằng Cron Job

Cron job là công cụ giúp thiết lập hẹn giờ chạy một chức năng nào đó.

Đầu tiên bạn cần tạo một thư mục backup.

$ mkdir -p /srv/backups/databases

Tiếp theo, chạy lệnh dưới đây để bắt đầu tạo một cron job.

$ crontab -e

Tiếp theo chạy lệnh dưới đây để tạo một lịch trình backup vào lúc 0h sáng mỗi ngày.

0 0 * * *  pg_dump  -U postgres freetutsdb > /srv/backups/postgres/freetutsdb.sql

Cuối cùng lưu file và Exit.

Vậy là xong, qua bài này bạn đã biết cách tạo backup và restore PostgreSQL Database trên Linux Server rồi đấy. Chúc bạn thành công.

Trả lời

Email của bạn sẽ không được hiển thị công khai. Các trường bắt buộc được đánh dấu *