PostgreSql 備份恢復

一、概述

??數據庫備份一般可分為物理備份和邏輯備份,其中物理備份又可分為物理冷備和物理熱備,下面就各種備份方式進行詳細說明(一般情況下,生產環境采取的定時物理熱備+邏輯備份的方式,均是以下述方式為基礎進一步研發編寫適合自己業務環境的備份工具或腳本):

  • 物理冷備:在停庫的狀態下,直接復制 PostgreSQL 的數據文件。備份出來的文件僅可在相同的平臺環境中恢復(操作系統+數據庫版本相同),僅可全庫備份全庫恢復。
  • 物理熱備:在不停庫狀態下,拷貝數據庫的 data 目錄及 wal 歸檔,基于數據庫自身的時間點備份恢復技術(Point-In-Time Recovery),通過不停地重放 wal 日志將數據推到備份結束后的任意一個時間點。備份出來的文件僅可在相同的平臺環境中恢復(操作系統+數據庫版本相同),僅可全庫備份全庫恢復。
  • 邏輯備份:利用 PostgreSQL 中自帶的 pg_dump、pg_dumpall 進行 sql 轉儲,或使用客戶端管理工具進行備份(實際也是調用的 pg_dump、pg_dumpall 命令),備份出來的文件可跨平臺恢復,且可針對具體的對象進行備份恢復。

數據量越大,備份速度越慢,下列表中所列備份速度為相同環境下,三種備份方式的相對速度:

物理冷備物理熱備邏輯備份
停庫不停庫不停庫
全庫備份恢復全庫備份恢復具體數據庫對象備份恢復
相同平臺環境恢復相同平臺環境恢復可跨平臺數據庫版本恢復
備份速度快備份速度快二進制轉儲備份速度較快,sql 文本轉儲備份速度一般

二、物理冷備

2.1 備份

--停庫
pg_ctl stop--打包數據目錄
cd /data/pg13/
tar -cf backup_pg13.tar data

在這里插入圖片描述

2.2 恢復

備份的機器本地恢復或傳到其他相同環境的機器進行恢復,需確保操作系統和數據庫版本相同。

--確保恢復環境的數據庫沒有運行,若運行需關閉
ps -ef|grep postg--將原 data 目錄改名
cd /data/pg13
mv data data_old--將打的備份包解壓至原 data 所在目錄下
tar -xvf backup_pg13.tar--啟動數據庫
pg_ctl start

在這里插入圖片描述
在這里插入圖片描述

三、物理熱備

??PostgreSQL 在數據目錄的 pg_wal 子目錄(10版本之前是 pg_xlog 子目錄)中始終維護一個WAL日志文件。該日志文件記錄了數據庫數據文件的每次改變。最初設計該日志文件的主要目的是為了數據庫異常崩潰后,能夠通過重放最后一次 Checkpoint 點之后的日志文件,把數據庫推到最終的一致狀態,避免數據丟失或不一致。此日志文件的機制也提供了一種熱備份方案:基礎備份加上重放 wal 日志,將數據推到備份結束后的任意一個時間點。

3.1 備份

1)建立 wal 連續歸檔

  • 準備好歸檔目錄,并確保空間充足。
  • wal_level 需要 replica 或以上級別。
  • 歸檔模式 archive_mode 開啟。
  • archive_command 指定一個 shell 命令,且確保命令中的路徑存在。
--在大的磁盤空間下,創建歸檔目錄
mkdir /data/pg13/archive -p--將下列參數加入 postgresql.conf 文件中,并重啟數據庫。
wal_level = 'replica'
archive_mode = 'on'
archive_command = 'test ! -f /data/pg13/archive/%f && cp %p /data/pg13/archive/%f'  # Unix
archive_command = 'copy "%p" "C:\\data\\archive\\%f"'  # Windows

在這里插入圖片描述

2)制作基礎備份

方式一:pg_basebackup

pg_basebackup -D /data/pg13/dbbak

在這里插入圖片描述

方式二:使用低級 API 制作非排他基礎備份

允許其他并發備份運行,既包括那些使用同樣的 API 開始的備份,也包括那些用 pg_basebackup 開始的備份。

--發出開始備份標識
select pg_start_backup('label', false, false);--另外窗口備份數據目錄
cp /data/pg13/data /data/pg13/databak -rp--發出備份開始的同一窗口發出終止備份標識
select * FROM pg_stop_backup(false);
select pg_switch_wal();

在這里插入圖片描述

在 PostgreSQL 9.6 之前,只能通過 API 排他備份方式(排他式備份方法已過時,應避免使用)。

--發出開始備份標識
select pg_start_backup('label',true);--另外窗口備份數據目錄
cp /data/pg13/data  /data/pg13/databak -rp--發出備份開始的同一窗口發出終止備份標識
select * FROM pg_stop_backup();
select pg_switch_wal();

3.2 恢復

1)停止原數據庫

pg_ctl stop

2)基礎備份拷貝至原數據目錄

mv /data/pg13/data /data/pg13/data_old
cp /data/pg13/dbbak /data/pg13/data -rp
  • 如果沒有足夠的空間,至少要保存集簇的 pg_wal 子目錄的內容,因為它可能包含在系統垮掉之前還未被歸檔的日志。
  • 若在其他機器上恢復確保數據目錄所有權及權限(所有權 postgres,權限 0700)。
  • 若使用了自定義表空間,確保 pg_tblspc 子目錄中的軟連接指向正確。

在這里插入圖片描述

3)配置恢復參數

??恢復參數在 PostgreSQL12 版本之前是配置在 recovery.conf 文件中的,而自 PostgreSQL12 版本開始合并到了 postgresql.conf 文件中。默認情況下,恢復將會一直恢復到 WAL 日志的末尾,下面的參數可以被用來指定一個更早的停止點。在 recovery_target、recovery_target_lsn、recovery_target_name、recovery_target_time 和recovery_target_xid 中, 最多只能使用一個。

--postgresql.conf 或 postgresql.auto.conf 中配置均可,當都配置時 postgresql.auto.conf 會覆蓋 postgresql.conf 文件中的配置
#archive_mode = 'on'      #恢復期間先關閉歸檔模式,確認恢復的數據沒問題后,再開啟
restore_command = 'cp /data/pg13/archive/%f %p'
recovery_target_time = '2023-08-11 15:58:00'    #不配置該參數時,默認恢復到最新時間點restore_command = 'copy "C:\\data\\archive\\%f" "%p"'  # Windows

在這里插入圖片描述

其他可選配置

--恢復到指定時間
recovery_target_time = '2023-08-10 14:00:00'
--恢復到一致狀態后盡快結束
recovery_target = 'immediate'
--恢復到 pg_create_restore_point() 所創建還原點
recovery_target_name = 'string'
--恢復到指定事務ID
recovery_target_xid = 'string' 
--恢復將繼續進行的預寫日志位置的LSN
recovery_target_lsn = 'pg_lsn'
--指定是否在指定的恢復目標之后停止(on)或在恢復目標之前停止(off),適用于 recovery_target_lsn、recovery_target_time 或者 recovery_target_xid 被指定的情況。默認 on
recovery_target_inclusive = 'boolean' 
--恢復到指定時間線,可以是數字時間線 ID 或特殊值,默認 latest
recovery_target_timeline = 'string'
--達到恢復目標時服務器應該立刻采取的動作
pause:恢復將會被暫停(默認)。
promote:恢復處理將會結束并且服務器將開始接受連接。
shutdown:將在達到恢復目標之后停止服務器。recovery_target_action = 'enum' 

注意:

  • 由于在 recovery_target_action 被設置為 shutdown 時,recovery.signal 將不會被移除, 任何后續的啟動都將會以立刻關閉為終結,除非該配置被改變或者 recovery.signal 文件被手工移除。
  • 如果沒有設置恢復目標,如果沒有啟用 hot_standby,pause設置的動作將和shutdown一樣。 如果在升級期間達到恢復目標,pause 的設置將與 promote的行為相同。
  • 在任何情況下,如果已配置了恢復目標,但歸檔恢復在達到目標之前結束,則服務器將關閉,并出現致命錯誤。

4)創建恢復標識文件

touch $PGDATA/recovery.signal

5)啟動數據庫

數據庫在啟動過程中自動應用配置文件中恢復設置,將數據庫推進至指定位置

pg_ctl start

在這里插入圖片描述

6)核對數據確認是否需要繼續往下推進

當指定時間點恢復時,啟動數據庫后默認為只讀狀態,此時可查詢數據進行檢查,若不是想要的數據,可繼續往后推進(只能向上次恢復的時間點后推進,不能向之前倒推)

--時間點繼續推進
pg_ctl stop將 postgresql.auto.conf 中之間繼續向后改recovery_target_time = '2023-08-11 15:59:00'pg_ctl start

數據庫為只讀狀態,recovery.signal 恢復標識文件存在時,就可繼續推進。
在這里插入圖片描述

確認數據沒問題后,可使用如下命令,結束恢復,數據庫恢復讀寫模式:

select pg_wal_replay_resume();

此時 recovery.signal 恢復標識文件也會自動刪除
在這里插入圖片描述

四、邏輯備份

??pg_dumpall 工具可以將 PostgreSQL 中的所有數據庫轉儲到一個文本文件,它會對集簇中的每個數據庫調用 pg_dump 來完成該工作,由于 pg_dumpall 僅能轉儲文本文件(sql 腳本格式),當數據量大時,改方式效率較低,故一般僅用其導出全局對象(數據庫、角色、表空間)的功能,備份數據庫則使用 pg_dump 方式:

--導出數據庫、角色、表空間定義
pg_dumpall -h localhost -U postgres --port=5432 -f backup.sql --globals-only  --clean

pg_dump 用法:https://xiaosonggong.blog.csdn.net/article/details/122743398

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/35943.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/35943.shtml
英文地址,請注明出處:http://en.pswp.cn/news/35943.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Linux 基礎

鞏固基礎,砥礪前行 。 只有不斷重復,才能做到超越自己。 能堅持把簡單的事情做到極致,也是不容易的。 linux的目錄結構 linux的文件系統采用樹狀的目錄結構,在此結構的最上層是根目錄“/”, 然后在此目錄下再創建其他…

【算法——雙指針】LeetCode 1089 復寫零

千萬不要被這道題標注著“簡單”迷惑了,實際上需要注意的細節很多。 題目描述: 解題思路: 正序遍歷,確定結果數組的最后一個元素所在的位置;知道最后一個元素的位置后倒序進行填充。 先找到最后一個需要復寫的數 先…

javaee dom4j讀取xml文件

引入jar包 dom4j-1.6.1.jar 創建xml文件 <?xml version"1.0" encoding"UTF-8"?> <books><book id"1"><title ID"t1">背影</title><price>88</price><author>三毛</author>…

Excel表格制作,快速提升效率好方法!

“作為一個剛開始工作的職場新人&#xff0c;每天要做各種不同的表格&#xff0c;真的讓我很崩潰&#xff0c;感覺我對這些表格制作一點都不了解&#xff0c;Excel表格制作有什么比較好的方法嗎&#xff1f;” Excel作為一款廣泛應用于各個領域的管理和分析工作&#xff0c;給我…

【STM32】FreeRTOS消息隊列和信號量學習

一、消息隊列&#xff08;queue&#xff09; 隊列是一種用于實現任務與任務之間&#xff0c;任務與中斷之間消息交流的機制。 注意&#xff1a;1.數據的操作是FIFO模式。 2.隊列需要明確數據的大小和隊列的長度。 3.寫和讀都會出現堵塞。 實驗&#xff1a;創建一個消息隊列…

解決 Oracle 數據庫中表被鎖問題的方案和方法

我們經常會遇到表被鎖的情況&#xff0c;這可能會嚴重影響數據庫的性能和可用性。我將與大家分享如何識別、分析和解決這些問題&#xff0c;以及如何使用特定的 SQL 查詢來執行解鎖操作。 了解表鎖的原因 首先&#xff0c;讓我們來了解一下導致表被鎖的常見原因。長時間運行的…

(四)Unity開發Vision Pro——參考文檔

4.參考文檔 4.1 支持的功能和組件 4.1.1 支持的 Unity 功能和組件 大多數 Unity 組件無需修改即可在此平臺上運行 - 包括大多數自定義 MonoBehaviours、動畫邏輯、物理、輸入處理、資產管理、AI 等。然而&#xff0c;需要渲染的組件需要特殊的支持。因此&#xff0c;一些組件…

qt5.15.2 使用mysql8.1

報錯&#xff1a; QMYSQL driver not loaded 報錯&#xff1a;無 QMYSQL 使用 QStringList drivers QSqlDatabase::drivers(); //獲取現在可用的數據庫驅動 foreach(QString driver, drivers) qDebug() << driver; “QSQLITE” “QMARIADB” “QMYSQL” “QMYSQL3” “…

Linux常用命令——dmidecode命令

在線Linux命令查詢工具 dmidecode 在Linux系統下獲取有關硬件方面的信息 補充說明 dmidecode命令可以讓你在Linux系統下獲取有關硬件方面的信息。dmidecode的作用是將DMI數據庫中的信息解碼&#xff0c;以可讀的文本方式顯示。由于DMI信息可以人為修改&#xff0c;因此里面…

網絡編程的使用

文章目錄 基礎代碼URL類進行傳輸編碼解碼 協議TCPUDPhttp PORT端口協議的實現TCPUDP 模擬服務器 基礎代碼 最后一個是&#xff1a;只要再timeout時間內連接上就是true URL類 導了一個common-iojar包&#xff0c;那個IOUtils就是那個里面的工具類 進行傳輸編碼解碼 協議 TC…

多線程:線程池

線程池 提前創建多個線程放入線程池中&#xff0c;使用時直接獲取&#xff0c;使用完直接放入池中&#xff1b;可以避免頻繁創建銷毀&#xff0c;實現重復利用&#xff0c;類似生活中的公共交通工具。好處&#xff1a;提高相應速度&#xff1b;降低資源消耗&#xff1b;便于線…

【Spring Cloud +Vue+UniApp】智慧建筑工地平臺源碼

智慧工地源碼 、智慧工地云平臺源碼、 智慧建筑源碼支持私有化部署&#xff0c;提供SaaS硬件設備運維全套服務。 前言&#xff1a;互聯網建筑工地&#xff0c;是將互聯網的理念和技術引入建筑工地&#xff0c;從施工現場源頭抓起&#xff0c;最大程度的收集人員、安全、環境、材…

微信小程序調用map數據 并在wxml中對數組進行截取的操作

wxs文件的位置如圖 實現數組截取 只保留五張圖片 <wxs module"filter" src"./slicefunc.wxs"></wxs> <view class"wrap"><view class"search-box" bindtap"toSearch"><view class"v1"…

【幾個python虛擬環境會遇到的問題】

幾個python虛擬環境會遇到的問題 twine is not recognized as an internal or external command,operable program or batch file.setup命令不報錯但不起作用pipreqs is not recognized as an internal or external command,operable program or batch file. ‘twine’ is not …

快遞管理系統springboot 寄件物流倉庫java jsp源代碼mysql

本項目為前幾天收費幫學妹做的一個項目&#xff0c;Java EE JSP項目&#xff0c;在工作環境中基本使用不到&#xff0c;但是很多學校把這個當作編程入門的項目來做&#xff0c;故分享出本項目供初學者參考。 一、項目描述 快遞管理系統springboot 系統有1權限&#xff1a;管…

11. Docker Swarm(二)

1、前言 上一篇中我們利用Docker Swarm搭建了基礎的集群環境。那么今天我們就來驗證以下該集群的可用性。上一篇的示例中&#xff0c;我創建了3個實例副本&#xff0c;并且通過訪問http://192.168.74.132:8080得到我們的頁面。 2、驗證高可用 1&#xff09;我們可以通過以下命…

13個頂級AI代碼助手排行榜【2023最新】

AI代碼助手&#xff08;AI Coding Assistant&#xff09;是一種利用人工智能幫助開發人員更快、更準確地編寫代碼的軟件工具。 它可以通過根據提示生成代碼或在你實時編寫代碼時建議自動完成代碼來實現此目的。 以下是AI代碼助手可以做的一些事情&#xff1a; 與你使用的流行代…

YOLOv5可視化界面

Pyside6可視化界面 安裝Pyside6 激活之前的虛擬環境yolov5 在該環境的終端輸入以下命令 pip install -i https://pypi.tuna.tsinghua.edu.cn/simple pyside6輸入where python找到當前使用的Python的路徑 找到該路徑下的designer.exe文件&#xff08;/Lib/site-packages/PySi…

布置Zabbix監控

一、在 Web 頁面中添加 agent 主機 1.1打開Zabbix的Web頁面 2.2在 Web 頁面中添加 agent 主機 二、在 Web 頁面創建自定義監控項模板 2.1創建模版

《Java面向對象程序設計》學習筆記——第 8 章 設計模式

?專欄&#xff1a;《Java面向對象程序設計》學習筆記 第 8 章 設計模式 一個好的設計系統往往是易維護、易擴展、易復用的。 8.1 設計模式簡介 8.1.1 什么是設計模式 一個設計模式 (pattern) 是針對某一類問題的最佳解決方案&#xff0c;而且己經被成功應用于許多系統的設…