全部產品
Search
文件中心

PolarDB:從自建PostgreSQL遷移至PolarDB PostgreSQL版

更新時間:Jul 11, 2024

本文介紹通過pg_dumpallpg_dumppg_restore命令將自建PostgreSQL資料庫遷移至PolarDB PostgreSQL版中。

遷移的源庫為RDS for PostgreSQL執行個體時,請參考從RDS PostgreSQL遷移至PolarDB PostgreSQL版

前提條件

PolarDB PostgreSQL版執行個體的儲存空間應大於自建PostgreSQL資料庫的儲存空間。

注意事項

該操作為全量資料移轉。為避免遷移前後資料不一致,遷移操作開始前請停止自建資料庫的相關業務,並停止資料寫入。

準備工作

  1. 建立一個Linux作業系統的ECS執行個體,本案例使用的ECS為Ubuntu 16.04 64位作業系統。詳情請參考建立ECS執行個體

    說明
    • 要求ECS執行個體和遷移的目標PolarDB PostgreSQL版執行個體處於同一個專用網路。

    • 可建立一個隨用隨付的ECS執行個體,遷移完成後釋放執行個體。

  2. 在ECS執行個體中安裝PostgreSQL,以便執行資料恢複的命令。詳情請參考PostgreSQL官方文檔

    說明

    請確保安裝的PostgreSQL資料庫版本與自建PostgreSQL資料庫版本一致。

操作步驟一 備份自建資料庫

該操作為全量資料移轉。為避免遷移前後資料不一致,遷移操作開始前請停止自建資料庫的相關業務,並停止資料寫入。

  1. 在自建PostgreSQL資料庫伺服器上執行以下命令,備份資料庫中的所有角色資訊。

    pg_dumpall -U <username> -h <hostname> -p <port> -r -f <filename>

    參數說明:

    • <username>:登入自建PostgreSQL資料庫的帳號。

    • <hostname>:自建PostgreSQL資料庫的串連地址,本機可使用localhost

    • <port>:資料庫服務的連接埠號碼。

    • <filename>:產生的備份檔案名稱。

    樣本:

    pg_dumpall -U postgres -h localhost -p 5432 -r -f roleinfo.sql
  2. 命令列提示Password:時,輸入資料庫帳號對應的密碼,開始備份資料庫中的所有角色資訊。

  3. 使用vim命令將角色資訊備份檔案中的SUPERUSER替換為polar_superuser

    說明

    如果角色資訊備份檔案中沒有SUPERUSER資訊,可跳過本步驟。

    樣本圖

  4. 在自建PostgreSQL資料庫伺服器上執行以下命令,備份資料庫中的資料。

    pg_dump -U <username> -h <hostname> -p <port> <dbname> -Fd -j <njobs> -f <dumpdir>

    參數說明:

    • <username>:登入自建PostgreSQL資料庫的帳號。

    • <hostname>:自建PostgreSQL資料庫的串連地址,本機可使用localhost

    • <port>:資料庫服務的連接埠號碼。

    • <dbname>:要備份的資料庫名。

    • <njobs>:同時執行備份作業的並發數。

      說明
      • 參數<njobs>可減少轉儲的時間,但也會增加資料庫伺服器的負載。

      • 如果您的自建PostgreSQL資料庫是9.2以前的版本,您還需要指定--no-synchronized-snapshots參數。

    • <dumpdir>:產生的備份檔案所屬目錄。

    樣本:

    pg_dump -U postgres -h localhost -p 5432 mytestdata -Fd -j 5 -f postgresdump
  5. 命令列提示Password:時,輸入資料庫帳號對應的密碼,資料庫開始備份。

  6. 等待備份完成,PostgreSQL資料庫資料將備份至指定的目錄中,本案例為postgresdump

操作步驟二 資料移轉至PolarDB PostgreSQL版

  1. 將備份檔案所屬的目錄上傳至ECS執行個體中。

    說明

    包含角色資訊備份檔案和Database Backup檔案。

  2. 在ECS上執行以下命令,將角色資訊備份檔案中的角色資訊遷移至PolarDB PostgreSQL版執行個體中。

    psql -U <username> -h <hostname>  -p <port> -d <dbname>  -f <filename>

    參數說明:

    • <username>:登入PolarDB PostgreSQL版資料庫的帳號。

    • <hostname>:PolarDB PostgreSQL版執行個體的主地址(私網)。

    • <port>:資料庫服務的連接埠號碼,請參考查看串連地址和連接埠

    • <dbname>:串連的資料庫的名稱。

    • <filename>:角色資訊備份檔案名。

    psql -U gctest -h pc-xxxxxxxx.pg.polardb.cn-qd-pldb1.rds.aliyuncs.com -d testdb -p 1921 -f roleinfo.sql
  3. 命令列提示Password:時,輸入資料庫帳號對應的密碼,角色資訊開始匯入。

  4. 在ECS上執行以下命令,將資料庫資料恢複至PolarDB PostgreSQL版執行個體中。

    pg_restore -U <username> -h <hostname> -p <port> -d <dbname> -j <njobs> <dumpdir>

    參數說明:

    • <username>:登入PolarDB PostgreSQL版資料庫的帳號。

    • <hostname>:PolarDB PostgreSQL版執行個體的主地址(私網),詳情請參考查看或申請串連地址

    • <port>:資料庫服務的連接埠號碼,請參考查看串連地址和連接埠

    • <dbname>:串連並直接恢複到的目標資料庫名。

      說明

      目標資料庫需已存在,如不存在請在目標執行個體中建立該資料庫。

    • <njobs>:同時執行資料恢複作業的並發數。

      說明

      此選項可減少資料恢複的時間,但也會增加資料庫伺服器的負載。

    • <dumpdir>:備份檔案所在目錄。

    樣本:

    pg_restore -U gctest -h pc-mxxxxxxxx.pg.polardb.cn-qd-pldb1.rds.aliyuncs.com -p 1921 -d mytestdata -j 6 postgresdump
  5. 命令列提示 Password:時,輸入資料庫帳號對應的密碼,資料開始遷移。

    說明

    如果忘記密碼,請參考修改密碼

等待資料移轉完成即可。