本文介紹通過pg_dumpall、pg_dump和pg_restore命令將自建PostgreSQL資料庫遷移至PolarDB PostgreSQL版中。
遷移的源庫為RDS for PostgreSQL執行個體時,請參考從RDS PostgreSQL遷移至PolarDB PostgreSQL版。
前提條件
PolarDB PostgreSQL版執行個體的儲存空間應大於自建PostgreSQL資料庫的儲存空間。
注意事項
該操作為全量資料移轉。為避免遷移前後資料不一致,遷移操作開始前請停止自建資料庫的相關業務,並停止資料寫入。
準備工作
建立一個Linux作業系統的ECS執行個體,本案例使用的ECS為Ubuntu 16.04 64位作業系統。詳情請參考建立ECS執行個體。
說明要求ECS執行個體和遷移的目標PolarDB PostgreSQL版執行個體處於同一個專用網路。
可建立一個隨用隨付的ECS執行個體,遷移完成後釋放執行個體。
在ECS執行個體中安裝PostgreSQL,以便執行資料恢複的命令。詳情請參考PostgreSQL官方文檔。
說明請確保安裝的PostgreSQL資料庫版本與自建PostgreSQL資料庫版本一致。
操作步驟一 備份自建資料庫
該操作為全量資料移轉。為避免遷移前後資料不一致,遷移操作開始前請停止自建資料庫的相關業務,並停止資料寫入。
在自建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命令列提示
Password:時,輸入資料庫帳號對應的密碼,開始備份資料庫中的所有角色資訊。使用
vim命令將角色資訊備份檔案中的SUPERUSER替換為polar_superuser。說明如果角色資訊備份檔案中沒有
SUPERUSER資訊,可跳過本步驟。
在自建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命令列提示
Password:時,輸入資料庫帳號對應的密碼,資料庫開始備份。等待備份完成,PostgreSQL資料庫資料將備份至指定的目錄中,本案例為postgresdump。
操作步驟二 資料移轉至PolarDB PostgreSQL版
將備份檔案所屬的目錄上傳至ECS執行個體中。
說明包含角色資訊備份檔案和Database Backup檔案。
在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命令列提示
Password:時,輸入資料庫帳號對應的密碼,角色資訊開始匯入。在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命令列提示
Password:時,輸入資料庫帳號對應的密碼,資料開始遷移。說明如果忘記密碼,請參考修改密碼。
等待資料移轉完成即可。