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é!
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:
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:
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 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é.