Trong môi trường sản xuất, bất kể PostgreSQL của bạn lớn hay nhỏ cơ sở dữ liệu có thể được, thường xuyên trở lại là một khía cạnh thiết yếu của quản lý cơ sở dữ liệu. Trong bài viết này, bạn sẽ học cách sao lưu và khôi phục cơ sở dữ liệu PostgreSQL.
Chúng tôi giả định rằng bạn đã có một bản cài đặt hoạt động của hệ thống cơ sở dữ liệu PostgreSQL. Nếu không, hãy đọc các bài viết sau của chúng tôi để cài đặt PostgreSQL trên bản phân phối Linux của bạn.
- Cách cài đặt PostgreSQL và pgAdmin4 trong Ubuntu 20.04
- Cách cài đặt PostgreSQL và pgAdmin trong CentOS 8
- Cách cài đặt PostgreSQL và pgAdmin trong RHEL 8
Hãy bắt đầu…
Sao lưu một cơ sở dữ liệu PostgreSQL duy nhất
PostgreSQL cung cấp pg_dump tiện ích giúp bạn sao lưu cơ sở dữ liệu. Nó tạo tệp cơ sở dữ liệu với các lệnh SQL ở định dạng có thể dễ dàng khôi phục trong tương lai.
Để sao lưu, một PostgreSQL cơ sở dữ liệu, hãy bắt đầu bằng cách đăng nhập vào máy chủ cơ sở dữ liệu của bạn, sau đó chuyển sang Postgres tài khoản người dùng và chạy pg_dump như sau (thay thế tecmintdb
với tên của cơ sở dữ liệu bạn muốn sao lưu). Theo mặc định, định dạng đầu ra là tệp kịch bản SQL văn bản thuần túy.
$ pg_dump tecmintdb > tecmintdb.sql
pg_dump cũng hỗ trợ các định dạng đầu ra khác. Bạn có thể chỉ định định dạng đầu ra bằng -F
tùy chọn, trong đó c
nghĩa là tệp lưu trữ định dạng tùy chỉnh, d
nghĩa là kho lưu trữ định dạng thư mục và t
nghĩa là tệp lưu trữ định dạng tar:tất cả các định dạng đều phù hợp để nhập vào pg_restore .
Ví dụ:
$ pg_dump -F c tecmintdb > tecmintdb.dump OR $ pg_dump -F t tecmintdb > tecmintdb.tar
Để kết xuất đầu ra ở định dạng đầu ra thư mục, hãy sử dụng -f
cờ (được sử dụng để chỉ định tệp đầu ra) để chỉ định thư mục đích thay vì một tệp. Thư mục sẽ được tạo bởi pg_dump không được tồn tại.
$ pg_dump -F d tecmintdb -f tecmintdumpdir
Để sao lưu tất cả PostgreSQL cơ sở dữ liệu, sử dụng pg_dumpall công cụ như hình.
$ pg_dumpall > all_pg_dbs.sql
Bạn có thể khôi phục kết xuất bằng psql như hình.
$ pgsql -f all_pg_dbs.sql postgres
Khôi phục cơ sở dữ liệu PostgreSQL
Để khôi phục PostgreSQL cơ sở dữ liệu, bạn có thể sử dụng psql hoặc pg_restore các tiện ích. psql được sử dụng để khôi phục các tệp văn bản được tạo bởi pg_dump trong khi pg_restore được sử dụng để khôi phục cơ sở dữ liệu PostgreSQL từ kho lưu trữ được tạo bởi pg_dump ở một trong các định dạng không phải văn bản thuần túy (tùy chỉnh, tar hoặc thư mục).
Dưới đây là một ví dụ về cách khôi phục kết xuất tệp văn bản thuần túy:
$ psql tecmintdb < tecmintdb.sql
Như đã đề cập ở trên, kết xuất định dạng tùy chỉnh không phải là tập lệnh cho pgsql , vì vậy nó phải được khôi phục bằng pg_restore như hình.
$ pg_restore -d tecmintdb tecmintdb.dump OR $ pg_restore -d tecmintdb tecmintdb.tar OR $ pg_restore -d tecmintdb tecmintdumpdir
Sao lưu cơ sở dữ liệu PostgreSQL lớn
Nếu cơ sở dữ liệu bạn đang sao lưu lớn và bạn muốn tạo tệp đầu ra tương đối nhỏ hơn, thì bạn có thể chạy kết xuất nén nơi bạn phải lọc đầu ra của pg_dump thông qua một công cụ nén chẳng hạn như gzip hoặc bất kỳ yêu thích nào của bạn:
$ pg_dump tecmintdb | gzip > tecmintdb.gz
Nếu cơ sở dữ liệu cực lớn, bạn có thể kết xuất song song bằng cách kết xuất number_of_jobs các bảng đồng thời bằng cách sử dụng -j
cờ, như được hiển thị.
$ pg_dump -F d -j 5 -f tecmintdumpdir
Điều quan trọng cần lưu ý là tùy chọn kết xuất song song làm giảm thời gian kết xuất, nhưng mặt khác, nó cũng làm tăng tải trên máy chủ cơ sở dữ liệu.
Sao lưu cơ sở dữ liệu PostgreSQL từ xa
pg_dump là một công cụ khách PostgreSQL thông thường, nó hỗ trợ các hoạt động trên máy chủ cơ sở dữ liệu từ xa. Để chỉ định máy chủ cơ sở dữ liệu từ xa pg_dump nên liên hệ, sử dụng các tùy chọn dòng lệnh -h
để chỉ định máy chủ từ xa và -p
chỉ định cổng từ xa mà máy chủ cơ sở dữ liệu đang nghe. Ngoài ra, hãy sử dụng -U
cờ để chỉ định tên vai trò cơ sở dữ liệu để kết nối.
Hãy nhớ thay thế 10.10.20.10 và 5432 và tecmintdb với địa chỉ IP máy chủ từ xa hoặc tên máy chủ, cổng cơ sở dữ liệu và tên cơ sở dữ liệu tương ứng.
$ pg_dump -U tecmint -h 10.10.20.10 -p 5432 tecmintdb > tecmintdb.sql
Đảm bảo rằng người dùng kết nối từ xa có các đặc quyền cần thiết để truy cập cơ sở dữ liệu và phương thức xác thực cơ sở dữ liệu thích hợp được định cấu hình trên máy chủ cơ sở dữ liệu, nếu không, bạn sẽ gặp lỗi như được hiển thị trong ảnh chụp màn hình sau.
Cũng có thể kết xuất cơ sở dữ liệu trực tiếp từ máy chủ này sang máy chủ khác, sử dụng pg_dump và psql tiện ích như hình.
$ pg_dump -U tecmint -h 10.10.20.10 tecmintdb | pqsl -U tecmint -h 10.10.20.30 tecmintdb
Tự động sao lưu cơ sở dữ liệu PostgreSQL bằng Cron Job
Bạn có thể thực hiện sao lưu định kỳ bằng cách sử dụng cron việc làm. Cron công việc là một phương tiện thường được sử dụng để lập lịch các loại tác vụ khác nhau để chạy trên máy chủ.
Bạn có thể định cấu hình công việc cron để tự động hóa PostgreSQL sao lưu cơ sở dữ liệu như sau. Lưu ý rằng bạn cần chạy các lệnh sau với tư cách là superuser PostgreSQL:
$ mkdir -p /srv/backups/databases
Tiếp theo, chạy lệnh sau để chỉnh sửa crontab để thêm một công việc cron mới.
$ crontab -e
Sao chép và dán dòng sau vào cuối crontab. Bạn có thể sử dụng bất kỳ định dạng kết xuất nào được giải thích ở trên.
0 0 * * * pg_dump -U postgres tecmintdb > /srv/backups/postgres/tecmintdb.sql
Lưu tệp và thoát.
Dịch vụ cron sẽ tự động bắt đầu chạy công việc mới này mà không cần khởi động lại. Và công việc cron này sẽ chạy hàng ngày vào lúc nửa đêm, đó là giải pháp tối thiểu cho công việc sao lưu.
Để biết thêm thông tin về cách lên lịch công việc cron, hãy xem:Cách tạo và quản lý công việc Cron trên Linux
Đó là nó cho bây giờ! Bạn nên biến việc sao lưu dữ liệu trở thành một phần trong quy trình quản lý cơ sở dữ liệu của bạn. Để liên hệ với chúng tôi nếu có bất kỳ câu hỏi hoặc nhận xét nào, hãy sử dụng biểu mẫu phản hồi bên dưới. Để biết thêm thông tin, hãy xem trang tham chiếu pg_dump và pg_restore.