Today I learned: Backup và restore dữ liệu trong PostgreSQL

07 tháng 02, 2019 - 1506 lượt xem

Trong bài viết trước, tôi đã chia sẻ quá trình tôi tạo một database đơn giản. Ở phần cuối bài viết, tôi có chia sẻ link download file database mẫu tôi đã tạo. Trong bài viết này, tôi chia sẻ cách tôi tạo ra và làm thế nào để restore (khôi phục) dữ liệu từ file đó.

Trước tiên, tôi khởi tạo một Docker Container chạy PostgreSQL server:

docker run --name postgres_db -e POSTGRES_PASSWORD=123 -d -p 5432:5432 postgres:11.1-alpine

Sau đó, tôi tạo dữ liệu mẫu theo hướng dẫn tại: https://github.com/handuy/sample_db

Sau khi đã có dữ liệu mẫu, tôi bắt đầu tiến hành backup dữ liệu

1. Tạo file database backup

Sau khi đã khởi tạo Docker Container chạy PostgreSQL server, chạy lệnh sau để chui vào trong container:

docker exec -it postgres_db /bin/bash

hiển thị ra màn hình như dưới thì là OK:

Bên trong Docker Container chạy PostgreSQL server

Dữ liệu mẫu của tôi đang để ở database postgres, do đó tôi sẽ tiến hành backup cho database này bằng lệnh sau:

/usr/local/bin/pg_dump -U postgres -F t postgres > /sample_db.tar
  • /usr/local/bin/pg_dump: pg_dump là một PostgreSQL tool dùng để backup dữ liệu
  • -U postgres: user dùng để kết nối đến PostgreSQL. Ở đây tôi dùng user postgres
  • -F t: định dạng của file output. "t" nghĩa là định dạng .tar
  • postgres: database mà tôi muốn backup
  • > /sample_db.tar: tên và đường dẫn của file output

Sau khi chạy lệnh trên, tôi kiểm tra trong thư mục /. Lưu ý là tôi vẫn đang ở bên trong Docker Container chạy Postgres:

File sample_db.tar tại thư mục /
File sample_db.tar tại thư mục /

Tiếp theo, tôi copy file sample_db.tar này từ Docker Container ra bên ngoài host ở thư mục Desktop (các bạn có thể chọn thư mục khác tùy ý):

docker cp postgres_db:/sample_db.tar $HOME/Desktop

Sau khi đã có file backup, tôi tiến hành khôi phục dữ liệu từ file backup này

2. Khôi phục dữ liệu từ file backup

Đầu tiên, tôi tạo thêm một Docker Container chạy PostgreSQL server, lần này tôi expose ra cổng 5433:

docker run --name restore_db -e POSTGRES_PASSWORD=123 -d -p 5433:5432 postgres:11.1-alpine

Sau đó, tôi copy file sample_db.tar ở thư mục $HOME/Desktop trên host vào trong Docker Container restore_db vừa tạo:

docker cp $HOME/Desktop/sample_db.tar restore_db:/

Chui vào trong Docker Container restore_db để kiểm tra:

docker exec -it restore_db /bin/bash
File sample_db.tar đã được copy vào trong Docker Container restore_db
File sample_db.tar đã được copy vào trong Docker Container restore_db

Sau đó, vẫn ở bên trong Docker Container restore_db, tôi tiến hành khôi phục dữ liệu từ file sample_db.tar bằng lệnh sau:

/usr/local/bin/pg_restore -U postgres -d postgres --verbose /sample_db.tar
  • /usr/local/bin/pg_restore: pg_restore là một PostgreSQL tool dùng để khôi phục dữ liệu
  • -U postgres: user dùng để kết nối đến PostgreSQL server. Ở đây tôi dùng user postgres
  • -d postgres: database mà tôi muốn khôi phục dữ liệu. Ở đây tôi chọn database postgres
  • --verbose: in các thông tin trong quá trình khôi phục dữ liệu ra màn hình terminal
  • /sample_db.tar: đường dẫn trỏ đến file backup. Tôi vừa copy file backup từ host vào thư mục / bên trong Docker Container restore_db nên đường dẫn sẽ là /sample_db.tar

Màn hình hiển thị như ảnh dưới thì là OK, dữ liệu đã được khôi phục:

pg_restore đã khôi phục dữ liệu thành công
pg_restore đã khôi phục dữ liệu thành công

 

Bình luận

avatar
Nguyễn Hàn Duy 2020-03-19 13:16:30.266575 +0000 UTC
+1
Avatar
* Vui lòng trước khi bình luận.
Ảnh đại diện
  +1 Thích
+1