基本概念
服務(wù)器系統(tǒng)錯(cuò)誤、硬件故障或者人為失誤都可能導(dǎo)致數(shù)據(jù)的丟失或損壞。因此,備份和恢復(fù)
對于數(shù)據(jù)庫的高可用性至關(guān)重要。數(shù)據(jù)庫管理員應(yīng)該根據(jù)業(yè)務(wù)的需求制定合適的備份策略,并提
前演練各種故障情況下的恢復(fù)過程,做到有備無患。
在升級(jí) PostgreSQL 版本之前,通常也需要先進(jìn)行數(shù)據(jù)庫的備份。另外,備份也可以用于主從復(fù)制結(jié)構(gòu)中的從節(jié)點(diǎn)初始化
備份(backup)
是通過某種方式(物理復(fù)制或者邏輯導(dǎo)出)將數(shù)據(jù)庫的文件或結(jié)構(gòu)和數(shù)據(jù)
拷貝到其他位置進(jìn)行存儲(chǔ)
還原(restore)
是一種不完全的恢復(fù),使用備份的文件將數(shù)據(jù)庫恢復(fù)到執(zhí)行備份時(shí)的狀態(tài)。
備份時(shí)間點(diǎn)之后的數(shù)據(jù)變更無法通過還原進(jìn)行恢復(fù)。
恢復(fù)(recovery)
通常是先使用物理備份文件進(jìn)行還原,然后再應(yīng)用備份時(shí)間點(diǎn)到故障點(diǎn)之
間的日志文件(WAL),將數(shù)據(jù)庫恢復(fù)到最新狀態(tài)。
備份類型
根據(jù)備份的方式和內(nèi)容的不同,可以進(jìn)行以下分類。
物理備份與邏輯備份
在線備份與離線備份
全量備份與增量備份
全量備份(Full Backup)
就是備份所有的數(shù)據(jù)庫文件,執(zhí)行一次完整的 PostgreSQL 數(shù)據(jù)庫集群備份。這種方式需要備份的內(nèi)容較多,備份時(shí)較慢,但是恢復(fù)速度更快。
增量備份(Incremental Backup)
就是備份上一次備份(任何類型)之后改變的文件。另外,
差異備份(Differential Backup)是針對上一次完全備份后發(fā)生變化的所有文件進(jìn)行備份。增量
備份每次備份的數(shù)據(jù)量較小,但是恢復(fù)時(shí)需要基于全量備份,并依次恢復(fù)增量部分,時(shí)間較長。
差異備份位于兩者之間
備份恢復(fù)工具
- pg_dump,邏輯備份工具,支持單個(gè)數(shù)據(jù)庫(可以指定模式、表)的導(dǎo)出,可以選擇導(dǎo)出的格式
- pg_dumpall,邏輯備份工具,用于導(dǎo)出整個(gè)數(shù)據(jù)庫集群,包括公用的全局對象
- pg_basebackup,物理備份工具,為數(shù)據(jù)庫集群創(chuàng)建一個(gè)基準(zhǔn)備份。它也可以用于時(shí)間點(diǎn)恢復(fù)(point-in-time recovery)的基準(zhǔn)備份,或者設(shè)置基于日志傳輸或流復(fù)制的從節(jié)點(diǎn)的初始化。
- psql, PostgreSQL 交互式命令行工具,也可以用于導(dǎo)入邏輯備份產(chǎn)生的 SQL 文件
- pg_restore,邏輯還原工具,用于還原 pg_dump 導(dǎo)出的歸檔格式的備份文件。
- COPY,PostgreSQL 專有的 SQL 語句,將表中的數(shù)據(jù)復(fù)制到文件,或者將文件中的數(shù)據(jù)復(fù)制到表中
此外,還可以通過第三方工具執(zhí)行備份與恢復(fù)操作。
- pgAdmin(開源)
- Barman(開源)
- pg_probackup(開源)
- pgBackRest(開源)
- BART(商業(yè))
備份與恢復(fù)
邏輯備份與還原
執(zhí)行邏輯備份時(shí),PostgreSQL 服務(wù)器必須已經(jīng)啟動(dòng),備份工具(例如 pg_dump)通過建立
數(shù)據(jù)庫連接,從數(shù)據(jù)庫中查詢出相應(yīng)的結(jié)構(gòu)信息和數(shù)據(jù),并生成備份文件。針對不同的備份格式,
PostgreSQL 提供了配套的還原工具。
備份單個(gè)數(shù)據(jù)庫
PostgreSQL 提供了備份單個(gè)數(shù)據(jù)庫的工具 pg_dump,在安裝目錄下bin文件夾下面,關(guān)于 pg_dump 工具的各種選項(xiàng),可以參考官方文檔
D:\tools\postgresql\bin\pg_dump.exe --help
它支持三種文件格式
使用windows dos命令行打開pg_dump,備份數(shù)據(jù)庫
備份成功,文件內(nèi)容
psql
官網(wǎng)介紹
-- 查詢使用方式
D:\tools\postgresql\bin\psql.exe --help
使用psql恢復(fù)數(shù)據(jù)庫
恢復(fù)成功
pg_dump
pg_dump 和 psql 支持的讀寫管道功能使得我們可以直接將數(shù)據(jù)庫從一個(gè)服務(wù)器導(dǎo)出到另一
個(gè)服務(wù)器-Fc
指定自定義格式,這種格式的備份,還原時(shí)需要使用PostgreSQL 提供的 pg_restore 工具-f
指定導(dǎo)出的文件名-h
數(shù)據(jù)庫連接地址-U
用戶名-d
數(shù)據(jù)庫名
"D:\tools\postgresql\bin\pg_dump.exe" -h localhost -U postgres -d cps -f "C:\Users\16837\Desktop\1.dmp" -Fc
輸入用戶postgres對應(yīng)的用戶密碼
備份成功,1.dmp文件內(nèi)容
pg_store
pg_restore路徑 -h數(shù)據(jù)庫連接地址 -U 用戶名 -d數(shù)據(jù)庫名 恢復(fù)數(shù)據(jù)庫文件地址
"D:\tools\postgresql\bin\pg_restore.exe" -h localhost -U postgres -d newdb "C:\Users\16837\Desktop\1.dmp"
輸入用戶postgres對應(yīng)的用戶密碼
恢復(fù)成功,newdb下的表products被創(chuàng)建
備份整個(gè)集群
pg_dump 每次只導(dǎo)出一個(gè)數(shù)據(jù)庫,而且它不會(huì)導(dǎo)出角色或表空間(屬于集群范圍)相關(guān)的信
息。為此,PostgreSQL 還提供了導(dǎo)出數(shù)據(jù)庫集群的 pg_dumpall 工具。它會(huì)針對集群中的每個(gè)數(shù)
據(jù)庫調(diào)用 pg_dump 來完成導(dǎo)出工作,同時(shí)還導(dǎo)出所有數(shù)據(jù)庫公用的全局對象(pg_dump 不保存
這些對象),包括數(shù)據(jù)庫用戶和組、表空間以及所有數(shù)據(jù)庫的訪問權(quán)限等屬性
pg_dumpall官網(wǎng)介紹
因?yàn)?pg_dumpall 從所有數(shù)據(jù)庫中讀取表,所以需要以一個(gè)超級(jí)用戶的身份連接以便生成完
整的導(dǎo)出操作。同樣,還原時(shí)也需要超級(jí)用戶特權(quán)執(zhí)行備份的腳本,這樣才能增加用戶和組以及
創(chuàng)建數(shù)據(jù)庫文章來源:http://www.zghlxwxcb.cn/news/detail-729361.html
-- pg_dumpall路徑 -U用戶名 -f備份文件路徑
"D:\tools\postgresql\bin\pg_dumpall.exe" -U postgres -f "C:\Users\16837\Desktop\1.sql"
備份成功,文件內(nèi)容文章來源地址http://www.zghlxwxcb.cn/news/detail-729361.html
到了這里,關(guān)于postgresql-備份與恢復(fù)的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!