目錄
概述
主要記錄一下如何使用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