Restore database PostgreSQL phần 1

Xin chào các bạn, trên group “Kho tài liệu kiến thức về Database”, có một bạn đã yêu cầu mình làm 1 loại bài hướng dẫn cách Backup/Restore PostgreSQL Database.

Bài viết này sẽ hướng dẫn các bạn Quy trình để Restore PostgreSQL ở chế độ No Archive mode.  Chúng ta cùng bắt đầu nhé!

Đọc thêm  Cấu hình chức năng archive mode trong PostgreSQL

   Xây dựng môi trường

 

Tôi thực hiện bài lab này trên PostgreSQL 13, phiên bản hệ điều hành CentOS 7

   Tạo database

create database testdb

   Kết nối đến testdb và tạo dữ liệu

\c testdb

create table khach_hang (id int, name text);

insert into khach_hang values (1,'nguyen van a');
insert into khach_hang values (1,'pham van b');

select * from khach_hang;

Kết quả như sau:

testdb=# select * from khach_hang;
 id |     name     
----+--------------
  1 | nguyen van a
  1 | pham van b
(2 rows)

   Backup database

Dữ liệu đã chuẩn bị xong, bây giờ tôi sẽ backup lại bằng pg_basebackup

pg_basebackup -D /var/lib/pgsql/13/backups -Ft -z -Xf -P -l 'full backup'

Trong câu lệnh này:

   Thư mục để lưu backup đó là /var/lib/pgsql/13/backups

   -Ft -z để nén dữ liệu sau khi backup

Kết quả của câu lệnh backup như sau:

Chi tiết bạn có thể xem lại bài viết:

Đọc thêm  Backup database PostgreSQL bằng pg_basebackup

Ok, như vậy tôi đã set up môi trường xong.


   Giả lập tình huống bị hỏng dữ liệu

Trước tiên tôi sẽ shutdown PostgreSQL instance xuống

pg_ctl stop

Sau đó tôi sẽ giả lập tình huống data directory bị hỏng bằng cách xóa toàn bộ thư mục đó đi

rm -rf /var/lib/pgsql/13/data

Như vậy, khi startup lại PostgreSQL, tôi sẽ gặp lỗi sau:

$ pg_ctl start
pg_ctl: directory "/var/lib/pgsql/13/data" does not exist

   Restore lại PostgreSQL

Bây giờ tôi sẽ tiến hành khôi phục lại PostgreSQL

Đầu tiên tôi tạo lại thư mục data và gán cho nó quyền phù hợp

$ mkdir /var/lib/pgsql/13/data
$ chmod 700 /var/lib/pgsql/13/data

Sau đó, tôi khôi phục lại bằng câu lệnh tar như sau:

$ tar -xzf /var/lib/pgsql/13/backups/base.tar.gz -C /var/lib/pgsql/13/data

Trong câu lệnh này

   /var/lib/pgsql/13/backups/base.tar.gz: Là file backup PostgreSQL mà chúng ta đã tạo ra ở bước trước.

   -C /var/lib/pgsql/13/data: Là đường dẫn sẽ khôi phục lại PostgreSQL.

Sau khi đã chạy xong câu lệnh trên, bạn thấy thư mục data với đầy đủ nội dung đã quay trở lại rồi

Bạn startup lại PostgreSQL lên nào

pg_ctl start
waiting for server to start....2021-05-31 17:07:03.599 +07 [9986] LOG:  redirecting log output to logging collector process
2021-05-31 17:07:03.599 +07 [9986] HINT:  Future log output will appear in directory "log".
. done
server started

Và cuối cùng, bạn kiểm tra lại dữ liệu xem đã đầy đủ chưa nhé:

Như các bạn đã thấy, tôi đã restore dữ liệu thành công, nhưng dữ liệu chỉ restore được đến thời điểm bạn thực hiện backup thôi. Giả sử bạn backup dữ liệu lúc 11h, và 12h database bị hỏng, bạn cần restore lại, kỹ thuật nào có thể giúp bạn làm mất ít dữ liệu nhất.

Đón xem bài viết sau:

Đọc thêm  Restore Point in Time Recovery database PostgreSQL

Chúc các bạn thành công nhé.

Nguồn: https://dangxuanduy.com/

Xin cho tôi được biết, bạn cảm thấy bài viết này như thế nào? Ý kiến của bạn sẽ giúp tôi nâng cao chất lượng bài viết của mình.

    Hãy chia sẻ bài viết này nếu bạn thấy có ích nhé
    0 0 votes
    Article Rating
    Subscribe
    Notify of
    guest
    0 Comments
    Inline Feedbacks
    View all comments