LOGO OA教程 ERP教程 模切知識交流 PMS教程 CRM教程 開發文檔 其他文檔  
 
網站管理員

PostgreSQL 完整性校驗,數據超可靠!

admin
2025年8月8日 0:30 本文熱度 279

你需要對數據庫中數據進行校驗,防止其出現損壞嗎?

?
在山坡漫步的大象

pg_checksums 介紹

PostgreSQL 11 引入了一個 pg_checksums 工具。PostgreSQL 12 為其新增了多項功能。

現在,我們可以對離線實例啟用和禁用校驗和了。

對于離線實例,現在 pg_checksums 可以支持更多運行模式:

  • --enable 用于啟用實例中的校驗和,更新所有數據塊使其具備正確的校驗和,并在最后更新控制文件。
  • --disable 用于禁用實例中的校驗和,僅更新控制文件。
  • --check 是一個額外選項,能夠驗證實例的校驗和,若未指定模式則默認使用該選項。

當運行--enable--disable時,數據文件夾會進行刷寫以保證持久性,隨后會更新控制文件并刷新,以確保在工具被中斷、終止或主機斷電時,操作仍能保持一致性。如果未在選項中指定模式,則會使用 --check,以與舊版本的 pg_checksums 保持兼容。

其工作原理如下。該工具現在總共有三種模式:

  • --check 是默認模式(若未指定任何模式),也是該工具原本就具備的功能。此模式會掃描所有關系文件塊,并報告任何不匹配的情況。
  • --enable 用于啟用數據校驗和。它會重寫所有關系的數據塊,并在操作最后更新控制文件。請注意,根據不同的實例大小,這可能要花費一定時間,而且該工具不支持并行模式。
  • --disable 僅通過更新控制文件來禁用數據校驗和。

使用示例

對于一個已禁用數據校驗和的實例,可以按以下方式啟用校驗和。首先,需要切換的實例必須被干凈地關閉:

pg_controldata -D /my/data/folder/ | grep state
Database cluster state:               shut down

然后,運行以下命令即可啟用數據校驗和,所做的更改會反映到控制文件中:

pg_checksums --enable -D /my/data/folder/
Checksum operation completed
Files scanned:  1144
Blocks scanned: 3487
pg_checksums: syncing data directory
pg_checksums: updating control file
Checksums enabled in cluster

pg_controldata -D /my/data/folder/ | grep checksum
Data page checksum version:           1

重復相同的操作會導致失敗,在已禁用數據校驗和的情況下再次禁用,也會出現同樣的情況:

pg_checksums --enable -D /my/data/folder/
pg_checksums: error: data checksums are already enabled in cluster

然后,可以按以下方式禁用校驗和:

pg_checksums --disable -D /my/data/folder/
pg_checksums: syncing data directory
pg_checksums: updating control file
Checksums disabled in cluster

pg_checksums --disable -D /my/data/folder/
pg_checksums: error: data checksums are already disabled in cluster

pg_controldata | grep checksum
Data page checksum version:           0

最后,需要注意的是,該工具能夠妥善處理操作過程中的失敗或中斷情況。例如,如果在啟用數據校驗和的過程中主機斷電,由于控制文件的更新是最后一步,數據文件夾將保持校驗和禁用的狀態。因此,可以從頭重試該操作。

此外,pg_checksums 還添加了一個選項-P/--progress,可以輸出任何正在運行的操作的進度。這樣,可以每秒鐘顯示--check--enable操作的處理進度信息(--disable 僅更新控制文件,速度很快)。這需要預先掃描數據文件夾,以便計算所有可校驗項的總大小,然后將其與已處理的量進行比較。

與 pg_rewind 和 pg_basebackup 類似,進度報告中顯示的信息,包括當前已處理的數據量和待處理的總數據量。

請注意,進度選項僅適用于--check--enable。進度報告每秒鐘更新一次,如下所示:

pg_checksums --enable --progress
27/27 MB (100%) computed

這需要額外掃描數據文件夾,以便預先了解所有可校驗項的總大小,這會額外消耗一些資源,但當在大型實例上執行操作需要很長時間時,進度報告非常有用。

升級啟用校驗和

在備份驗證方面,pg_checksums 已經是一個相當強大的工具,但在升級 PostgreSQL 老版本實例后,啟用校驗和時仍然會存在障礙。在 PostgreSQL 中,可以通過邏輯復制將數據復制到一個使用 initdb 初始化且已啟用數據校驗和的新實例,但初始數據復制可能需要很長時間和大量資源。請注意,如果實例依賴于對關系數據塊進行物理復制的備份工具(如 pg_rewind),可能會出現這樣的情況:實例已啟用校驗和,但某些頁面可能已損壞,因為這些頁面來自未啟用校驗和的實例。因此,在一組 PostgreSQL 節點中切換校驗和時,應注意在所有節點上同時一致地啟用校驗和。

現在,由于數據校驗和僅在后臺將頁面刷新到磁盤或共享緩沖區被換出時才會計算,并且即使進行全頁寫入,WAL 日志也不需要計算校驗和,因此依靠物理復制(WAL 流)可以更輕松地以最小的停機時間啟用校驗和。例如,假設有兩個節點(一個主節點和一個備用節點),且沒有在多個節點之間對關系數據塊進行物理復制,可以按以下步驟來操作:

假設主節點和備用節點都已禁用數據校驗和,然后我們來啟用數據校驗和。

  1. 1. 正常地停止備用節點,并使用 --enable 啟用校驗和。
  2. 2. 啟動備用節點,使其與主節點同步。
  3. 3. 正常地停止主節點。
  4. 4. 將備用節點提升為主節點,并進行故障轉移。
  5. 5. 在之前的主節點上啟用校驗和。
  6. 6. 將其重新連接到已提升的備用節點(現在是主節點),此時兩個實例都已完成啟用校驗和。


閱讀原文:原文鏈接


該文章在 2025/8/8 13:09:08 編輯過
關鍵字查詢
相關文章
正在查詢...
點晴ERP是一款針對中小制造業的專業生產管理軟件系統,系統成熟度和易用性得到了國內大量中小企業的青睞。
點晴PMS碼頭管理系統主要針對港口碼頭集裝箱與散貨日常運作、調度、堆場、車隊、財務費用、相關報表等業務管理,結合碼頭的業務特點,圍繞調度、堆場作業而開發的。集技術的先進性、管理的有效性于一體,是物流碼頭及其他港口類企業的高效ERP管理信息系統。
點晴WMS倉儲管理系統提供了貨物產品管理,銷售管理,采購管理,倉儲管理,倉庫管理,保質期管理,貨位管理,庫位管理,生產管理,WMS管理系統,標簽打印,條形碼,二維碼管理,批號管理軟件。
點晴免費OA是一款軟件和通用服務都免費,不限功能、不限時間、不限用戶的免費OA協同辦公管理系統。
Copyright 2010-2025 ClickSun All Rights Reserved

黄频国产免费高清视频,久久不卡精品中文字幕一区,激情五月天AV电影在线观看,欧美国产韩国日本一区二区
中文字幕日韩精品欧洲 | 思思热在线精品视频67 | 亚洲人成在线在线 | 曰本亚洲欧洲色A在线 | 亚洲A级片电影亚 | 中文字幕日韩第八页在线 |