本文說明如何將 Azure PostgreSQL-Flexible 伺服器還原為使用 Azure 入口網站備份的檔案。
必要條件
在從 Azure Database for PostgreSQL 彈性伺服器備份中還原之前,請先檢閱下列必要條件:
請確定您具有 還原作業的必要許可權。
備份資料會以 Blob 形式儲存在 Microsoft 租用戶的備份保存庫中。 在還原作業期間,備份資料會從一個租用戶的儲存體帳戶複製到另一個租用戶的儲存體帳戶。 確定還原的目標儲存體帳戶已將 AllowCrossTenantReplication 屬性設定為 true。
確定以檔案的形式還原備份的目標記憶體帳戶可透過公用網路存取。 如果記憶體帳戶使用私人端點,請先 更新其公用網路存取設定 ,再執行還原作業。
還原 Azure PostgreSQL - 彈性伺服器備份為檔案
備註
還原作業是分為兩個步驟的過程:
- 將備份從備份保存庫還原至記憶體容器。
- 將備份檔從記憶體容器還原至新的或現有的彈性伺服器。
若要還原 Azure PostgreSQL-Flexible 資料庫,請遵循下列步驟:
移至 [備份保存庫]>[備份執行個體]。 選取要還原的 PostgreSQL - 彈性伺服器,然後選取 [ 還原]。
使用 [選取還原點] 來選取您想要還原的時間點。 選取 [時間週期] 來變更日期範圍。
在 [還原參數] 索引標籤中,選擇目標儲存體帳戶和容器。選取 [驗證],以在最後檢閱和還原之前檢查還原參數權限。
驗證成功後,請選取 [檢閱 + 還原]。
在最後檢閱參數之後,選取 [還原 ] 以還原目標儲存體帳戶中選取的 PostgreSQL - 彈性伺服器備份。
提交還原作業,並在 [備份作業]下追蹤觸發的作業。
還原作業順利完成後,請移至儲存體帳戶容器,從 PostgreSQL – 彈性伺服器檢視檔案格式 (.sql 檔案) 的已還原資料庫。 Azure 備份也會產生下列備份檔:
Database.sql file(個別資料庫):包含特定資料庫的資料和結構描述資訊。Roles.sql files(整個執行個體):包含存在於伺服器層級的所有角色資訊。Tablespace.sql file:Tablespace 檔案。Schema.sql file:包含伺服器上所有資料庫的架構資訊。備註
建議您不要在 PostgreSQL - 彈性伺服器上執行此腳本,因為架構已經是腳本的
database.sql一部分。
將備份文件從記憶體容器還原至新的或現有的 PostgreSQL – 彈性伺服器
若要將備份文件從記憶體容器還原至新的或現有的 PostgreSQL – 彈性伺服器,請遵循下列步驟:
確定新的目標彈性伺服器上 已啟用所有必要的擴充 功能。
藉由存取 Azure 入口網站中的 [伺服器參數] 區段,並據以手動更新參數值,讓來源 PostgreSQL 資料庫與適用於 PostgreSQL 的 Azure 資料庫有相符的伺服器參數值。 儲存參數變更,然後重新啟動適用於 PostgreSQL 的 Azure 資料庫 - 彈性伺服器以套用新的設定。
如果新伺服器上需要 Microsoft Entra 驗證 ,請加以啟用並建立相關的Microsoft Entra 系統管理員。
建立新的資料庫以進行還原。
備註
在資料庫還原之前,您必須建立新的空白資料庫。 請確定您的用戶帳戶具有
CREATEDB許可權。若要建立資料庫,請使用
CREATE DATABASE Database_name命令。使用
database.sql file作為目標系統管理員使用者還原資料庫。建立目標資料庫之後,請執行下列命令,從 Azure 儲存體帳戶下載傾印檔案:
az storage blob download --container-name <container-name> --name <blob-name> --account-name <storage-account-name> --account-key <storage-account-key> --file <file-name>然後,執行下列命令,從傾印檔案還原此資料庫中的資料:
pg_restore -h <postgres-server-url> -p <port> -U <username> -d <database-name> --no-owner -v <File Name>-
--account-name:目標記憶體帳戶的名稱。 -
--container-name:Blob 容器的名稱。 -
--blob-name:Blob 的名稱。。 -
--account-key:儲存器帳戶金鑰。 -
-Fd:目錄格式。 -
-j:作業數目。 -
-C:使用建立資料庫本身的命令開始輸出,然後重新連線至其中。
備註
如果命令未如預期執行,請指定完整的檔案路徑,而不是僅使用檔案名稱。
或者,您可以下載備份檔並直接執行還原。
-
只還原必要的角色和許可權,並忽略 常見的錯誤。 如果您是以本機系統管理員身分執行合規性需求和數據擷取的還原,請略過此步驟。
為已還原的資料庫恢復角色和使用者
保存庫備份主要會針對合規需求進行還原,例如測試和稽核。 您可以以本機系統管理員身分登入並使用 database.sql 檔案進行還原;不需要其他角色才能擷取數據。
對於意外刪除保護或災害復原等其他用途,請確定根據組織需求建立必要的角色。 避免roles.sql和database.sql之間的重複。
- 還原相同的彈性伺服器:不一定需要角色還原。
-
還原至不同的彈性伺服器:使用
roles.sql檔案重新建立所需的角色。
當您從 roles.sql還原時,某些角色或屬性可能不適用於新的目標伺服器。
針對具有超級使用者存取權的環境(內部部署或 VM),您可以順暢地執行所有命令。
彈性伺服器案例的重要考慮
以下是主要考慮:
-
拿掉 Superuser-Only 屬性:在彈性伺服器上,沒有超級用戶許可權。 因此,請移除角色匯出檔中的屬性,例如
NOSUPERUSER和NOBYPASSRLS。 -
排除 Service-Specific 使用者:排除彈性伺服器服務特定的使用者(
azure_su、、azure_pg_adminreplication、localadmin、Entra Admin)。 當系統管理員新增至新的彈性伺服器時,會自動重新建立這些特定服務角色。
在還原資料庫物件之前,請確定您已正確備份和清理角色。 若要執行此動作,請從您的記憶體容器下載 roles.sql腳本,並建立所有必要的登入。
- 建立非 Entra 角色:使用本機系統管理員帳戶來執行角色建立腳本。
- 建立Microsoft Entra 角色:如果您需要為 Microsoft Entra 使用者建立角色,請使用 Microsoft Entra 系統管理員帳戶來執行必要的腳本。
您可以從記憶體帳戶下載角色文稿,如下列螢幕快照所示:
當您移轉輸出檔案時, roles.sql 可能包含新環境中不適用的特定角色和屬性。 您必須考慮下列事項:
- 拿掉只能由超級使用者設定的屬性:如果您移轉至沒有超級使用者許可權的環境,請從角色傾印中移除 NOSUPERUSER 和 NOBYPASSRLS 等屬性。
-
排除服務特定使用者:排除單一伺服器服務使用者,例如
azure_superuser或azure_pg_admin。 這些是服務特有的,而且會在新的環境中自動建立。
使用下列 sed 命令清除角色備份:
sed -i '/azure_superuser/d; /azure_pg_admin/d; /azuresu/d; /^CREATE ROLE replication/d; /^ALTER ROLE replication/d; /^ALTER ROLE/ {s/NOSUPERUSER//; s/NOBYPASSRLS//;}' roles.sql
此命令會刪除包含 azure_superuser、azure_pg_admin、azuresu 的行,以及以 CREATE ROLE 複寫和 ALTER ROLE 複寫開頭的行,並從 ALTER ROLE 語句中移除 NOSUPERUSER 和 NOBYPASSRLS 屬性。