從自建PostgreSQL遷移至PolarDB PostgreSQL版

更新時間:
Copy as MD

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

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

前提條件

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

注意事項

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

準備工作

  1. 建立一個Linux作業系統的ECS執行個體,本案例使用的ECSUbuntu 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資訊,可跳過本步驟。

    -- PostgreSQL database cluster dump
    --
    SET default_transaction_read_only = off;
    SET client_encoding = 'UTF8';
    SET standard_conforming_strings = on;
    --
    -- Roles
    --
    CREATE ROLE data1;
    ALTER ROLE data1 WITH NOSUPERUSER INHERIT CREATEROLE CREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'md5xxx';
    CREATE ROLE manisha;
    ALTER ROLE manisha WITH NOSUPERUSER INHERIT NOCREATEROLE NOCREATEDB LOGIN NOREPLICATION NOBYPASSRLS PASSWORD 'mdxxx';
    CREATE ROLE postgres;
    ALTER ROLE postgres WITH SUPERUSER INHERIT CREATEROLE CREATEDB LOGIN REPLICATION BYPASSRLS PASSWORD 'md5xxx';
    CREATE ROLE testuser;
    ALTER ROLE testuser WITH NOSUPERUSER INHERIT NOCREATEROLE CREATEDB LOGIN NOREPLICATION NOBYPASSRLS;
    --
    -- PostgreSQL database cluster dump complete
  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:時,輸入資料庫帳號對應的密碼,資料開始遷移。

    說明

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

等待資料移轉完成即可。