Mục lục

1. Giới thiệu

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

 

2. 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

1. Tạo database

create database testdb

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

testdb=# \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)

3. 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.

 

3. 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

4. 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/

Hiện tại, tôi có tổ chức đều đặn các khóa học về quản trị Oracle Database, tôi sẽ để thông tin ở đây, để bạn nào quan tâm về lịch học cũng như chương trình học có thể theo dõi nhé.

KHOÁ DÀNH CHO NGƯỜI MỚI

KHÓA HỌC: QUẢN TRỊ ORACLE DATABASE THẬT LÀ ĐƠN GIẢN (ADMIN 1)

CÁC KHOÁ NÂNG CAO:

KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ KIẾN TRÚC MULTITENANT 12c

KHÓA HỌC ORACLE NÂNG CAO: QUẢN TRỊ HỆ THỐNG DATA GUARD

CÁC KHOÁ COMBO:

COMBO 1: ADMIN 1 + MULTITENANT 12c

COMBO 2: ADMIN 1 + DATA GUARD

COMBO 3: ADMIN 1 + MULTITENANT 12c + DATA GUARD

LỊCH HỌC:

Mời bạn xem tại đây: LỊCH HỌC CÁC LỚP ORACLE 

ĐĂNG KÝ:

https://forms.gle/MtCAoRQFenP886y79

Hãy tham gia group “Kho tài liệu kiến thức database” để cùng học hỏi và chia sẻ nhé.

0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Phản hồi nội tuyến
Xem tất cả bình luận
0
Rất thích suy nghĩ của bạn, hãy bình luận.x