將資料遷移至啟用 TDE 的叢集,以及從這類叢集遷移資料

選取文件版本:

本指南說明如何使用 pg_dump 和 pg_restore,在已啟用透明資料加密 (TDE) 的叢集和未加密的叢集之間遷移資料。

無論是從 TDE 遷移至未加密的資料庫,還是反向遷移,都支援使用標準 PostgreSQL 邏輯備份工具。

使用 pg_dump 進行邏輯遷移時,系統會即時解碼來源端的加密資料,並將其轉儲為未加密的 SQL 陳述式。還原資料時,目的地叢集會根據本身的加密設定寫入資料。如果啟用 TDE,目標叢集會加密資料;如果停用 TDE,目標叢集會以純文字寫入資料。

事前準備

將已啟用 TDE 的資料庫遷移至未啟用 TDE 的資料庫

  1. 將啟用 TDE 的資料庫伺服器中的資料庫傾印至主機上的檔案。

    Docker

    docker exec -i TDE_CONTAINER_NAME pg_dump -U postgres -d DATABASE_NAME > /tmp/decrypted_dump.sql
    

    Podman

    podman exec -i TDE_CONTAINER_NAME pg_dump -U postgres -d DATABASE_NAME > /tmp/decrypted_dump.sql
    
  2. 按照「使用 Docker 安裝 AlloyDB Omni」一文中的說明,啟動已停用 TDE 的 AlloyDB Omni 伺服器。

  3. 將 dump 檔案還原至未加密的資料庫伺服器。

    Docker

    docker exec -i NON_TDE_CONTAINER_NAME psql -U postgres -c "CREATE DATABASE DATABASE_NAME"
    docker exec -i NON_TDE_CONTAINER_NAME psql -U postgres -d DATABASE_NAME < /tmp/decrypted_dump.sql
    

    Podman

    podman exec -i NON_TDE_CONTAINER_NAME psql -U postgres -c "CREATE DATABASE DATABASE_NAME"
    podman exec -i NON_TDE_CONTAINER_NAME psql -U postgres -d DATABASE_NAME < /tmp/decrypted_dump.sql
    

將已停用 TDE 的資料庫遷移至已啟用 TDE 的資料庫

  1. 使用 pg_dump 從未加密的資料庫伺服器傾印資料庫。

    Docker

    docker exec -i NON_TDE_CONTAINER_NAME pg_dump -U postgres -d DATABASE_NAME > /tmp/src_plaintext_dump.sql
    

    Podman

    podman exec -i NON_TDE_CONTAINER_NAME pg_dump -U postgres -d DATABASE_NAME > /tmp/src_plaintext_dump.sql
    
  2. 按照「建立啟用 TDE 的叢集」中的操作說明,啟動啟用 TDE 的 AlloyDB Omni 伺服器。

  3. 還原至已啟用 TDE 的資料庫伺服器。資料寫入時會以透明方式加密。

    Docker

    docker exec -i TDE_CONTAINER_NAME psql -U postgres -c "CREATE DATABASE DATABASE_NAME"
    docker exec -i TDE_CONTAINER_NAME psql -U postgres -d DATABASE_NAME < /tmp/src_plaintext_dump.sql
    

    Podman

    podman exec -i TDE_CONTAINER_NAME psql -U postgres -c "CREATE DATABASE DATABASE_NAME"
    podman exec -i TDE_CONTAINER_NAME psql -U postgres -d DATABASE_NAME < /tmp/src_plaintext_dump.sql
    

後續步驟