Thứ Sáu, 28 tháng 7, 2023

Backup dữ liệu trên PostgreSQL

Tản mạn: Tối hôm trước làm về sớm, thằng cùng chỗ làm rủ qua quán sashimi thịt ngựa. Không biết ăn thịt but đi ăn cùng cho vui. Nhắm mắt nuốt được vài miếng chấm toàn mù tạc xong tối về đau bụng cả đêm. Đúng là cái gì cũng phải có lửa mới hiệu quả được.
Xin lỗi các bạn thời gian vừa qua blog PostgreSQL Việt Nam hơi thiếu lửa.

Backup dữ liệu trên PostgreSQL

Hôm nay bocap sẽ tái khởi động với bài viết các cách thức backup dữ liệu trên PostgreSQL.
Có một số cách phân but về tổng quan backup trên PostgreSQL được chia làm 2 loại "offline backup", "online backup". Ngoài ra phân loại chi tiết hơn thì có thêm backup vật lý(backup data files) và backup logic(backup dữ liệu qua SQL). Đối với từng loại backup có những đặc điểm tốt xấu riêng. Hãy tìm hiểu và lựa chọn phương pháp phù hợp với môi trường của bạn.

Offline backup

Là hình thức backup dữ liệu khi PostgreSQL Server đã dừng hoạt động. Nên phương pháp này chỉ có thể backup theo phương pháp vật lý.
Sau khi dừng hoạt động từ server (pg_ctl stop -mf), chúng ta copy cả thư mục dữ liệu (database cluster). Nếu có sử dụng tablespace để lưu trữ dữ liệu ngoài thư mục dữ liệu thì phải backup cả những thư mục đó.
Đặc điểm của hình thức backup này.

  • Ảnh hưởng tới hệ thống: Phải stop database trước khi backup.
  • Phạm vi backup: Toàn bộ database cluster.
  • Thời điểm phục hồi khi restore: Thời điểm thực hiện sao lưu.

Chú ý:

  • Nếu database cluster sử dụng tính năng lưu trữ dữ liệu bên ngoài database cluster (tablespace), hoặc lưu trữ WAL ngoài database cluter, khi backup cũng phải backup các đối tượng này.

[bocap@localhost ~]$ pg_ctl stop -mf
waiting for server to shut down.... done
server stopped
[bocap@localhost ~]$ mkdir /mnt/backup/data_`date +"%m-%d-%y"`
[bocap@localhost ~]$ ls -l /mnt/backup/
合計 0
drwxrwxr-x. 2 bocap bocap 6 11月  1 12:50 data_11-01-17
[bocap@localhost ~]$ tar cvfz /mnt/backup/data_11-01-17/data.tar.gz $PGDATA 
[bocap@localhost ~]$ ll  /mnt/backup/data_11-01-17/
合計 130956
-rw-rw-r--. 1 bocap bocap 134096110 11月  1 12:53 data.tar.gz
[bocap@localhost ~]$ 

Online backup

Là hình thức backup dữ liệu khi PostgreSQL vẫn đang hoạt động và cho phép ảnh hưởng tới môi trường Database(ví dụ: ACCESS SHARE lock từ pg_dump hay ảnh hưởng I/O từ backup) của bạn ở một mức độ cho phép.
Hình thức backup này có thể thực hiện bởi cả 2 phương pháp backup vật lý và logic.

Online logic backup

Sử dụng lệnh pg_dump (backup theo đơn vị bảng, schema, .., database), hoặc pg_dumpall (backup toàn bộ dữ liệu của database cluster) để backup dữ liệu. Các câu lệnh này sẽ connect tới PostgreSQL và lấy dữ liệu theo dạng logic (SQL) và lưu trữ dưới dạng text hoặc tar(zip). Các câu lệnh này cũng restore dữ liệu về thời điểm chạy câu lệnh pg_dump/pg_dumpall.
Bắt đầu từ phiên bản PostgreSQL 9.3 pg_dump/pg_restore(9.2~) có thêm chức năng backup/restore dữ liệu song song (sử dụng nhiều connections). Trong những môi trường nhiều CPU và Disk có tính năng tốt có thể sử dụng chức năng này một cách hiệu quả.
Đặc điểm của hình thức backup này.

  • Ảnh hưởng tới hệ thống: Có thể backup khi database đang hoạt động.
  • Phạm vi backup: bảng, schema, ..database hoặc toàn bộ database cluster.
  • Thời điểm phục hồi khi restore: Thời điểm thực hiện sao lưu.

Chú ý:

  • pg_dump/pg_dumpall sẽ lần lượt lock tất cả các đối tượng backup (tables) ở chế độ AccessShareLock, nên cần chú ý khi thực hiện các thao tác có lock xung đột. Tham khảo thêm PostgreSQL Locks
  • Backup với định dạng text có thể restore bằng psql. Ở các định dạng khác, ta restore bằng lệnh pg_restore.
  • Với option -Z, pg_dump có thể nén dữ liệu backup với nhiều mức độ (0-9, mặc định là 6). But khi mức độ nén cao tỷ lệ CPU cũng sẽ cao theo. Nên cân đối hợp lý giữa CPU và dung lượng lưu trữ.

DangnoMacBook-Pro:~ bocap$ psql -c "select * from testtbl"
 id 
----
  1
(1 row)

DangnoMacBook-Pro:~ bocap$ pg_dump --table testtbl -f /tmp/testdump
DangnoMacBook-Pro:~ bocap$ cat /tmp/testdump | grep -v -e SET -e "\-" -e "^$"
CREATE TABLE testtbl (
    id integer
);
ALTER TABLE testtbl OWNER TO postgres;
COPY testtbl (id) FROM stdin;
1
\.
DangnoMacBook-Pro:~ bocap$ 

Online backup vật lý

Là cách tạo 1 basebackup (sử dụng lệnh pg_basebackup hoặc function pg_start_backup/pg_stop_backup) kết hợp với việc xuất archive log (transaction log được lưu trữ thông qua parameter archive_command). Khi restore ta tạo file recovery.conf trong thư mục data (basebackup), điền nội dung restore WAL từ đâu (parameter restore_command) sau đó khởi động database từ thư mục basebackup.
Dữ liệu backup sẽ được phục hồi tới thời điểm archive_command chạy lần cuối cùng (lệnh chỉ định trong archive_command sẽ được chạy khi dung lượng transaction đủ 16MB, hoặc quá thời gian chỉ định trong archive_timeout từ lần archive trước).
Đặc điểm của hình thức backup này.

  • Ảnh hưởng tới hệ thống: Có thể backup khi database đang hoạt động.
  • Phạm vi backup: bảng, schema, ..database hoặc toàn bộ database cluster.
  • Thời điểm phục hồi khi restore: Thời điểm thực hiện sao lưu.

Chú ý:

  • Xử lý tạo một basebackup giống như copy hoàn toàn một database cluster. Nên nếu dữ liệu lớn sẽ mất nhiều thời gian.
  • Khi pg_basebackup chạy lệnh này sẽ thực hiện một CHECKPOINT, mặc định CHECKPOINT này chạy ở chế độ chậm spread (có thể chậm hơn so với thông thường = checkpoint_completion_target * checkpoint_timeout = 2.5 phút). Nên cất nhắc chạy ở chế độ nhanh (-c fast) nếu muốn pg_basebackup diễn ra nhanh hơn. But cũng nên chú ý workload lớn khi CHECKPOINT nhanh có thể ảnh hưởng tới hệ thống database.
  • pg_basebackup mặc định không copy WAL (transaction log) sinh ra trong lúc chạy lệnh. Sử dụng option -x nếu muốn tạo một pg_basebackup sử dụng trong cấu hình replication.

DangnoMacBook-Pro:~ bocap$ grep replication $PGDATA/pg_hba.conf | grep -v "#"
host    replication     postgres        127.0.0.1/32            trust
host    replication     postgres        ::1/128                 trust
DangnoMacBook-Pro:~ bocap$ grep -e max_wal_senders -e wal_level -e archive_ $PGDATA/postgresql.conf
wal_level = replica			# minimal, replica, or logical
archive_mode = on		# enables archiving; off, on, or always
archive_command = 'test ! -f /mnt/archivedir/%f && cp %p /mnt/archivedir/%f'
archive_timeout = 30s		# force a logfile segment switch after this
max_wal_senders = 10		# max number of walsender processes
#max_standby_archive_delay = 30s	# max delay before canceling queries
DangnoMacBook-Pro:~ bocap$ ll /mnt/archivedir/
DangnoMacBook-Pro:~ bocap$ ll /mnt/data
DangnoMacBook-Pro:~ bocap$ pg_basebackup -D /mnt/data -h localhost
NOTICE:  pg_stop_backup complete, all required WAL segments have been archived
DangnoMacBook-Pro:~ bocap$ ll /mnt/data 
total 96
-rw-------   1 bocap  wheel      4 Nov  1 20:45 PG_VERSION
-rw-------   1 bocap  wheel    208 Nov  1 20:45 backup_label
drwx------   5 bocap  wheel    170 Nov  1 20:45 base
drwx------  56 bocap  wheel   1904 Nov  1 20:45 global
drwx------   3 bocap  wheel    102 Nov  1 20:45 pg_clog
drwx------   2 bocap  wheel     68 Nov  1 20:45 pg_commit_ts
drwx------   2 bocap  wheel     68 Nov  1 20:45 pg_dynshmem
-rw-------   1 bocap  wheel   4469 Nov  1 20:45 pg_hba.conf
-rw-------   1 bocap  wheel   1636 Nov  1 20:45 pg_ident.conf
drwx------   4 bocap  wheel    136 Nov  1 20:45 pg_logical
drwx------   4 bocap  wheel    136 Nov  1 20:45 pg_multixact
drwx------   3 bocap  wheel    102 Nov  1 20:45 pg_notify
drwx------   2 bocap  wheel     68 Nov  1 20:45 pg_replslot
drwx------   2 bocap  wheel     68 Nov  1 20:45 pg_serial
drwx------   2 bocap  wheel     68 Nov  1 20:45 pg_snapshots
drwx------   2 bocap  wheel     68 Nov  1 20:45 pg_stat
drwx------   2 bocap  wheel     68 Nov  1 20:45 pg_stat_tmp
drwx------   3 bocap  wheel    102 Nov  1 20:45 pg_subtrans
drwx------   2 bocap  wheel     68 Nov  1 20:45 pg_tblspc
drwx------   2 bocap  wheel     68 Nov  1 20:45 pg_twophase
drwx------   3 bocap  wheel    102 Nov  1 20:45 pg_xlog
-rw-------   1 bocap  wheel     88 Nov  1 20:45 postgresql.auto.conf
-rw-------   1 bocap  wheel  22320 Nov  1 20:45 postgresql.conf
DangnoMacBook-Pro:~ bocap$ ll /mnt/archivedir/
total 65544
-rw-------  1 bocap  wheel  16777216 Nov  1 20:45 000000010000000000000014
-rw-------  1 bocap  wheel  16777216 Nov  1 20:45 000000010000000000000015
-rw-------  1 bocap  wheel       305 Nov  1 20:45 000000010000000000000015.00000028.backup
DangnoMacBook-Pro:~ bocap$ 

Một số lưu ý khi backup

Khi backup, đối với từng hệ thống khác nhau, sẽ có những yêu cầu khác nhau. Thường khi backup users cần để ý tới những quan điểm bên dưới để đối ứng với yêu cầu hệ thống.

  • Cần restore dữ liệu về thời điểm nào.
    Ví dụ: Khi hệ thống bị trouble, muốn restore về thời điểm gần nhất thì nên sử dụng phương pháp Online backup vật lý.
  • Dung lượng dữ liệu backup.
    Ví dụ: Cần backup dữ liệu với dung lượng thấp thì nên sử dụng Online logic backup
  • Mức độ ảnh hưởng tới hệ thống.
    Ví dụ: Tính năng ổ cứng không tốt, không muốn xuất archive log để giảm Disk I/O thì không nên sử dụng phương pháp Online backup vật lý.  
=============================
* KHOÁ HỌC ORACLE DATABASE A-Z ENTERPRISE trực tiếp từ tôi giúp bạn bước đầu trở thành những chuyên gia DBA, đủ kinh nghiệm đi thi chứng chỉ OA/OCP, đặc biệt là rất nhiều kinh nghiệm, bí kíp thực chiến trên các hệ thống Core tại VN chỉ sau 1 khoá học.
* CÁCH ĐĂNG KÝ: Gõ (.) hoặc để lại số điện thoại hoặc inbox https://m.me/tranvanbinh.vn hoặc Hotline/Zalo 090.29.12.888
* Chi tiết tham khảo:
https://bit.ly/oaz_w
=============================
KẾT NỐI VỚI CHUYÊN GIA TRẦN VĂN BÌNH:
📧 Mail: binhoracle@gmail.com
☎️ Mobile/Zalo: 0902912888
👨 Facebook: https://www.facebook.com/BinhOracleMaster
👨 Inbox Messenger: https://m.me/101036604657441 (profile)
👨 Fanpage: https://www.facebook.com/tranvanbinh.vn
👨 Inbox Fanpage: https://m.me/tranvanbinh.vn
👨👩 Group FB: https://www.facebook.com/groups/DBAVietNam
👨 Website: https://www.tranvanbinh.vn
👨 Blogger: https://tranvanbinhmaster.blogspot.com
🎬 Youtube: https://www.youtube.com/@binhguru
👨 Tiktok: https://www.tiktok.com/@binhguru
👨 Linkin: https://www.linkedin.com/in/binhoracle
👨 Twitter: https://twitter.com/binhguru
👨 Podcast: https://www.podbean.com/pu/pbblog-eskre-5f82d6
👨 Địa chỉ: Tòa nhà Sun Square - 21 Lê Đức Thọ - Phường Mỹ Đình 1 - Quận Nam Từ Liêm - TP.Hà Nội

=============================
oracle tutorial, học oracle database, Tự học Oracle, Tài liệu Oracle 12c tiếng Việt, Hướng dẫn sử dụng Oracle Database, Oracle SQL cơ bản, Oracle SQL là gì, Khóa học Oracle Hà Nội, Học chứng chỉ Oracle ở đầu, Khóa học Oracle online,sql tutorial, khóa học pl/sql tutorial, học dba, học dba ở việt nam, khóa học dba, khóa học dba sql, tài liệu học dba oracle, Khóa học Oracle online, học oracle sql, học oracle ở đâu tphcm, học oracle bắt đầu từ đâu, học oracle ở hà nội, oracle database tutorial, oracle database 12c, oracle database là gì, oracle database 11g, oracle download, oracle database 19c, oracle dba tutorial, oracle tunning, sql tunning , oracle 12c, oracle multitenant, Container Databases (CDB), Pluggable Databases (PDB), oracle cloud, oracle security, oracle fga, audit_trail,oracle RAC, ASM, oracle dataguard, oracle goldengate, mview, oracle exadata, oracle oca, oracle ocp, oracle ocm , oracle weblogic, postgresql tutorial, mysql tutorial, mariadb tutorial, ms sql server tutorial, nosql, mongodb tutorial, oci, cloud, middleware tutorial, hoc solaris tutorial, hoc linux tutorial, hoc aix tutorial, unix tutorial, securecrt, xshell, mobaxterm, putty

ĐỌC NHIỀU

Trần Văn Bình - Oracle Database Master