Hướng dẫn Backup và Restore PostgreSQL

Hướng dẫn Backup và Restore PostgreSQL

Backup và Restore Database là việc vô cùng cần thiết trong quá trình quản trị. Khi DB bị​​ lỗi ít nhất cũng còn 1 chỗ​​ để​​ bấu víu vào​​ 

A./ Backup​​ và Restore PostgreSQL dạng file text (nên sử​​ dụng)

1./ Backup PostgreSQL

#tạo folder lưu trữ​​ backup và chown quyền

mkdir -p /opt/backup/DB/

chown -R postgres:postgres /opt/backup/DB/

#chuyển sang user postgres

su - postgres

# backup database​​ gitlab_production​​ đến file /opt/backup/DB/gitlab_production02.sql

pg_dump gitlab_production > /opt/backup/DB/gitlab_production.sql -h 127.0.0.1 -p 5432

# hoặc dùng lệnh sau:

pg_dump gitlab_production -f /opt/backup/DB/gitlab_production.sql -h 127.0.0.1 -p 5432

2./ Restore​​ PostgreSQL

# để​​ restore sử​​ dụng lệnh sau

psql gitlab_production < /opt/backup/DB/gitlab_production.sql -h 127.0.0.1 -p 5432

Lệnh trên cũng có thể​​ ghi đè (overide) DB khi restore

B./ Backup ​​ và Restore PostgreSQL dạng nén file tar

1./ Backup PostgreSQL dạng tar

pg_dump -U db_user -W -F t db_name > /path/to/your/file/dump_name.tar

2./ Restore PostgreSQL dạng tar

psql -U db_user db_name <​​ dump_name.sql

hoặc

pg_restore -d db_name /path/to/your/file/dump_name.tar -c -U db_user

3./​​ Các bước Restore PostgreSQL dạng nén Tar​​ cách khác

Bước 1:​​ Restore

Giải nén file​​ 

tar -xzvf dump_name.tar

Sau khi giải nén xong sẽ được thư mục

folder-after-extract-db

/opt/postgres/bin/pg_restore -Fd -j $(cat /proc/cpuinfo | grep Xeon | wc -l) --dbname='db_name_new' --host localhost --port 5432 --verbose "/where-store-db/folder-after-extract-db]"

option -j để lấy ra thông số lượng cpu để restore nhiều số lượng job cùng lúc

-j, --jobs=NUM  ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​ ​​​​ use this many parallel jobs to restore

Nếu thấy có Error trong quá trình restore có thể bỏ qua vì DB vẫn được restore đầy đủ.

Bước 2: Phân quyền

GRANT​​ ALL on DATABASE​​ db_name_new​​ to​​ db_user;

\c db_name_new

GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO​​ db_user;

Lưu ý:

Mình có test backup dạng nén tar và dạng text thì không thấy sự​​ khác biệt về​​ dung lượng và thời gian backup. Và việc backup dạng text khi restore thì không thấy​​ bị​​ lỗi, với dạng nén tar thì khi restore có lỗi. vì vậy lời khuyên là sử​​ dụng backup dạng text.

 

Cảm ơn các bạn đã theo dõi!

 

BÀI VIẾT CÙNG CHUYÊN MỤC

Không copy được giữa máy Windows và máy ảo qua mRemoteNG/RDP: Nguyên nhân và cách sửa
Không copy được giữa máy Windows và máy ảo qua ...

mRemoteNG Remote Desktop RDP Clipboard Redirection rdpclip.exe VPS Windows ...

Hướng dẫn bật Nested Virtualization trên ESXi để chạy Android Studio Emulator trong máy ảo Windows
Hướng dẫn bật Nested Virtualization trên ESXi để chạy ...

Nested Virtualization ESXi VMware Android Studio Android Emulator WHPX Hyper-V ...

PITR (Point In Time Recovery) là gì? Khôi phục Database về đúng thời điểm cần thiết
PITR (Point In Time Recovery) là gì? Khôi phục ...

PITR, Point In Time Recovery, PITR là gì, Database Recovery, PostgreSQL PITR, ...

Backup Database Full, Incremental, Differential khác nhau thế nào?
Backup Database Full, Incremental, Differential khác ...

Backup Database, Full Backup, Incremental Backup, Differential Backup, Backup ...

Database Cluster là gì? High Availability, Failover và Cluster Database hoạt động như thế nào?
Database Cluster là gì? High Availability, Failover và ...

Database Cluster, Database Cluster là gì, High Availability Database, Database ...