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:
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:
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
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:
Bình luận