使用 pg_dump 和 pd_dumpall 備份數據庫

概述

主要記錄一下如何使用postgresql自帶的數據庫備份工具。例如pg_dump 和 pg_dumpall 的使用。
備份數據庫是數據庫管理中最關鍵的任務之一。 備份數據庫之前,應考慮以下幾點:

  • 全部/部分數據庫
  • 數據和結構,或僅結構
  • 時間點恢復
  • 恢復性能

備份與恢復

數據庫備份可以粗略的分爲兩類

  • 邏輯備份
  • 物理備份

邏輯備份/恢復

邏輯備份通過讀取數據庫記錄集,且將記錄集寫入文本文件或自定義轉儲格式來實現。這種記錄
集的讀出與物理位置無關。
PG的邏輯備份實現方式:
– pg_dump:只能針對一個數據庫,能夠生成一個數據庫的一致性備份。備份的對象是數據庫中的對象。要求,數據庫是開啓的狀態。
– pg_dumpall:針對整個數據庫簇
對應的邏輯恢復:
– 生成的文本可以使用psql進行恢復
– 純數據可以用copy恢復
– 自定義轉儲格式只能使用pg_restore恢復

pg_dump 常用參數說明

pg_dump [OPTION]... [DBNAME]
– -h, --host=HOSTNAME : 連接到指定數據庫主機地址
– -p, --port=PORT : 連接到指定數據庫端口
– -U, --username=NAME : 連接使用的用戶名
– -d, --dbname=DBNAME : 導出的數據庫名字
– -a, --data-only:只導出數據
– -E encoding,--encoding=encoding:指定字符集編碼
– -j, --jobs=NUM : 導出併發數
– -f, --file=FILENAME : 導出文件名
– -F, --format=p|c|d|t : 導出數據格式(text, 自定義轉儲格式,目錄,tar)數據的兼容性用c更好。
– -n, --schema=schema:導出指定模式
– -t, --table=table:導出指定表(可以寫多個表)
– -s, --schema-only:只導出對象定義不導出數據(只導出數據的定義)
– -Z0~9:使用gzip壓縮(gzip 的壓縮級別 9 壓縮的級別最高)
– -c:創建對象前先刪除(先drop)
– -C:創建對象
– --disable-triggers:禁用觸發器(生成的備份文件加入禁用觸發器的命令,導完數據後再啓用)
• -S,--superuser=username:指定超級用戶(disable-triggers 配合使用)

pg_restore常用參數說明

主要是用在二進制轉儲文件的使用

pg_restore [OPTION]... [filename]
– -h, --host=HOSTNAME : 連接到指定數據庫主機地址
– -p, --port=PORT : 連接到指定數據庫端口
– -U, --username=NAME : 連接使用的用戶名
– -d, --dbname=DBNAME : 連接的數據庫名字
– -a, --data-only:只導入數據
– -j, --jobs=NUM : 導入併發數
– -f, --file=FILENAME : 導出文件名
– -F, --format=p|c|d|t : 文件數據格式(text, 自定義轉儲格式,目錄,tar)
– -n, --schema=schema:導入指定模式
– -t, --table=table:導入指定表
– -s, --schema-only:只導入對象定義不導入數據
– -c:創建對象前先刪除
– -C:創建對象
– --disable-triggers:禁用觸發器
• -S,--superuser=username:指定超級用戶

pg_dump 使用樣例

1 腳本文件範式恢復(單個表)

備份平面文件/ 使用psql 進行恢復

備份

pg_dump -d myDB -p 65432 -t black_blog -Fp -f black_blog.sql

在這裏插入圖片描述
刪除備份表測試

drop table black_blog

恢復

psql -f black_blog.sql -d myDB -p 65432

在這裏插入圖片描述

可以看到導出的文本都是psql 可以直接執行的腳本。

2 二進制文件備份 pg_restore 恢復(整個數據庫)

1備份數據庫使用二進制方式

 pg_dump -p 65432 -Fc -f atlsdb.dmp atlasdb

在這裏插入圖片描述
2 刪除數據庫
在這裏插入圖片描述
3 恢復數據庫(兩種方式恢復)
自動建庫

pg_restore -Fc -p 65432 -C -d postgres atlasdb.dmp

手動建庫恢復

createdb atlasdb
 pg_restore -Fc -d atlasdb /db/backup/atlasdb.dmp

3 壓縮備份

備份

pg_dump -t testtab1 -Z5 -f /db/backup/testtab1.sql.gz

恢復

gunzip -c /db/backup/testtab1.sql.gz|psql

4 並行備份

備份

pg_dump -j 4 -Fd -f /db/backup/dump atlasdb

恢復

pg_restore -d postgres -j 4 -C -Fd /db/backup/dump

pg_dumpall

備份整個 cluster 到一個腳本文件

pg_dumpall > outfile

eg

pg_dumpall > full.txt

恢復整個 cluster

psql -f infile postgres

eg

psql -f full.txt atlasdb
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章