閱讀712 返回首頁    go 阿裏雲 go 技術社區[雲棲]


本地PostgreSQL遷移至RDS for PostgreSQL__數據遷移_用戶指南_數據傳輸-阿裏雲

使用數據傳輸DTS可以將本地PostgreSQL實例的數據遷移到RDS For PostgreSQL實例。PostgreSQL遷移支持增量數據同步功能,可以實現在本地應用不停服的情況下,平滑完成PostgreSQL數據庫的遷移工作。

本小節簡單介紹使用DTS進行PostgreSQL->RDS for PostgreSQL數據遷移的任務配置流程。

遷移類型簡介

  • 結構遷移

    數據傳輸DTS將遷移對象的結構定義遷移到目標實例。對於PostgreSQL,數據傳輸服務支持結構遷移的對象包含:Table、trigger、view、sequence、function、user defined type、rule、domain、operation、aggregate

  • 全量數據遷移

    數據傳輸DTS將源數據庫遷移對象的存量數據全部遷移到目標實例。

  • 增量數據遷移

    增量數據遷移將遷移過程中,本地PostgreSQL實例的增量更新數據同步到目標RDS實例,最終實現本地PostgreSQL同目標RDS實例進入動態數據同步的過程。使用增量數據遷移,可以實現在本地PostgreSQL正常提供服務的時候,平滑完成PostgreSQL->RDS For PostgreSQL的數據遷移。

遷移限製

  • 源實例,支持PostgreSQL 9.2、9.3、9.4
  • 遷移過程中,不支持DDL操作
  • 不支持遷移使用C語言編寫的function
  • 如果使用了對象名映射功能後,依賴這個對象的其他對象可能遷移失敗

遷移權限要求

當使用數據傳輸服務進行PostgreSQL遷移時,在不同遷移類型情況下,源跟目標數據庫的遷移帳號權限要求如下:

遷移類型 結構遷移 全量遷移 增量數據遷移
本地PostgreSQL實例 pg_catalog的usage權限 遷移對象的select superuser
目的RDS實例 遷移對象的create、usage權限 schema的owner schema的owner

遷移順序

數據傳輸服務在進行PostgreSQL->RDS For PostgreSQL數據遷移時,為了解決對象間的依賴,提高遷移成功率。結構對象及數據的遷移順序如下:

  1. 進行結構對象:Table、view、sequence、function、user defined type、rule、domain、operation、aggregate的遷移
  2. 全量數據遷移
  3. 進行結構對象:trigger、foreign key的遷移

全量數據遷移完成後,任務列表中的遷移進度為:結構遷移100%,全量遷移100%,遷移狀態為“遷移中”,此時遷移任務正在進行步驟(3)中的對象的遷移。此時,請勿手動結束任務,否則會造成遷移數據丟失。

遷移步驟

下麵詳細介紹下使用DTS將本地的PostgreSQL數據庫遷移到RDS for PostgreSQL的任務配置流程。

RDS實例數據庫創建

在數據遷移過程中,如果待遷移的數據庫在目標RDS實例中不存在,那麼DTS自動會創建。但是對於如下兩種情況,用戶需要在配置遷移任務之前,手動創建數據庫。

  1. 數據庫名稱不符合:RDS定義規範(由小寫字母、數字、下劃線、中劃線組成,字母開頭,字母或數字結尾,最長64個字符)。
  2. 待遷移數據庫,在本地PostgreSQL跟目標RDS For PostgreSQL實例中存儲名稱不同。

對於這兩種情況,用戶需要在配置遷移任務之前,先在RDS控製台完成數據庫創建。具體參考RDS數據庫創建流程

遷移帳號創建

遷移任務配置,需要提供Oracle數據庫及目標RDS實例的遷移賬號。遷移賬號所需權限詳見上文的 遷移權限要求。

如果您的本地PostgreSQL或RDS For PostgreSQL實例的遷移賬號尚未創建,那麼可以參考如下流程創建遷移賬號:

  1. 通過PostgreSQL客戶端,在PostgreSQL中創建遷移賬號。

    1. create user username password 'password'

    如果您要使用增量遷移,那麼創建的賬號必須是superuser,所以創建賬號語句調整為:

    1. create user username with superuser password 'password'

    參數說明:

    • username:要創建的賬號
    • password:該賬號的登錄密碼
  2. 給遷移賬號授權,本地PostgreSQL及RDS For PostgreSQL的遷移賬號權限要求詳見上表。

    1. GRANT privileges ON tablename TO username;

    參數說明:

    • privileges:該賬號的操作權限,如 SELECT、INSERT、UPDATE 等。如果要授權該賬號所有權限,則使用 ALL
    • tablename:表名。如果要授權該賬號所有的表權限,則使用通配符 *
    • username:要授權的賬號名

邏輯流複製插件安裝

如果您需要使用增量數據遷移進行不停機遷移,那麼在任務配置之前,需要在本地PostgreSQL中安裝DTS提供的邏輯流複製插件。

  1. 插件下載。

    本地PostgreSQL 9.4版本

    本地PostgreSQL 9.5版本

  2. 插件安裝。

    1. 解壓下載的壓縮包。
    2. 將ali_decoding.so文件拷貝到 PostgreSQL安裝路徑的lib目錄下。

      如果用rpm包安裝,那麼這個絕對路徑為:/usr/pgsql-{$version}/lib/,其中$version為版本號,例如版本為9.5,那麼絕對路徑為:/usr/pgsql-9.5/lib。

    3. 將ali_decoding.contorl文件拷貝到PostgreSQL安裝路徑下的share/extension 目錄下。

      如果用rpm包安裝,那麼這個絕對路徑為:/usr/pgsql-${version}/share/extension/,其中${version}為PostgreSQL版本號,如果版本為9.5,那麼絕對路徑為:/usr/pgsql-9.5/share/extension/。

    4. 測試安裝是否成功。

      使用superuser賬號登錄PostgreSQL客戶端,運行如下SQL,看是否能夠成功創建replication slot。如果成功創建那麼說明插件安裝成功。

      1. SELECT * FROM pg_create_logical_replication_slot('replication_slot_test', 'ali_decoding');

      如果輸出結果如下,說明插件安裝成功。

      postgresql遷移_步驟4

      測試成功後,使用如下SQL將replication slot刪除掉。

      1. SELECT pg_drop_replication_slot('replication_slot_test');

遷移任務配置

當上麵的所有前置條件都配置完成後,就可以開始正式的數據遷移了。下麵詳細介紹遷移任務配置流程。

  1. 進入數據傳輸DTS控製台,點擊右上角的創建遷移任務,開始遷移任務配置。
  2. 本地PostgreSQL跟目標RDS For PostgreSQL實例連接信息配置。

    這個步驟主要配置 遷移任務名稱,PostgreSQL連接信息及目標RDS For PostgreSQL實例連接信息。其中:

    • 任務名稱

      DTS為每個任務自動生成一個任務名稱,任務名稱沒有唯一性要求。您可以根據需要修改任務名稱,建議為任務配置具有業務意義的名稱,便於後續的任務識別。

    • 源實例信息

      • 實例類型:選擇 有公網IP的自建數據庫
      • 數據庫類型: 選擇 PostgreSQL
      • 主機名或IP地址: 配置PostgreSQL訪問地址,這個地址必須為公網訪問方式
      • 端口:本地PostgreSQL實例的監聽端口
      • 數據庫名稱:連接PostgreSQL的默認數據庫名
      • 數據庫賬號:本地PostgreSQL實例的連接賬號
      • 數據庫密碼:本地PostgreSQL實例連接賬號對應的密碼
    • 目標實例信息

      • 實例類型:選擇 RDS實例
      • RDS實例ID: 配置遷移的目標RDS實例的實例ID。 DTS支持經典網絡、VPC網絡的RDS實例
      • 數據庫名稱:連接RDS For PostgreSQL的默認數據庫名
      • 數據庫賬號:RDS For PostgreSQL實例的連接賬號
      • 數據庫密碼:上麵RDS For PostgreSQL實例連接賬號對應的密碼

      PostgreSQL遷移_步驟1

      當配置完連接信息後,點擊右下角 授權白名單並進入下一步 進行白名單授權。這個步驟DTS會將DTS服務器的IP地址添加到目標RDS實例的白名單中,避免因為RDS實例設置了白名單,導致DTS服務器連接不上RDS實例導致遷移失敗。

  3. 選擇遷移對象及遷移類型。

    • 遷移類型

      對於PostgreSQL->RDS For PostgreSQL,支持 結構遷移、全量數據遷移、增量數據遷移。

      如果隻需要進行全量遷移,那麼遷移類型選擇:結構遷移+全量數據遷移。

      如果需要進行不停機遷移,那麼遷移類型選擇:結構遷移+全量數據遷移+增量數據遷移。

    • 遷移對象

      選擇您要遷移的對象。遷移對象選擇的粒度可以為:庫、表、列三個粒度。默認情況下,對象遷移到RDS for PostgreSQL實例後,對象名跟本地PostgreSQL實例一致。如果您遷移的對象在源實例跟目標實例上名稱不同,那麼需要使用DTS提供的對象名映射功能,詳細使用方式可以參考庫表列映射

      postgresql遷移_步驟2

  4. 預檢查。

    在遷移任務正式啟動之前,會先進行前置預檢查,隻有預檢查通過後,才能成功啟動遷移。預檢查的內容及修複方式可以參考本文末尾的 預檢查簡介 一節。

    如果預檢查失敗,那麼可以點擊具體檢查項後的按鈕,查看具體的失敗詳情,並根據失敗原因修複後,重新進行預檢查。

    postgresql遷移_步驟3

  5. 啟動遷移任務。

    當預檢查通過後,可以啟動遷移任務,任務啟動成功後,可以在任務列表中查看遷移的具體狀態及遷移進度。

    至此,完成本地PostgreSQL數據庫到RDS for PostgreSQL實例的數據遷移任務配置。

預檢查內容

DTS在啟動遷移之前,會進行前置預檢查,本小節簡單介紹PostgreSQL->RDS for PostgreSQL的預檢查內容:

預檢查項 檢查內容 備注
源庫連接性檢查 檢查DTS服務同本地PostgreSQL實例的連通性 (1) 填寫信息是否有誤?如果填寫信息有誤,請修改後重新預檢查
(2) 檢查端口是否配置從其他服務器連接
目的庫連接性檢查 檢查DTS服務同目的RDS For PostgreSQL實例的連通性 檢查填寫信息是否有誤,如果有誤請先修改後重新預檢查
目的庫連接性檢查 檢查DTS服務同目的RDS For PostgreSQL實例的連通性 檢查填寫信息是否有誤,如果有誤請先修改後重新預檢查
源庫版本檢查 檢查本地PostgreSQL版本跟目標RDS For PostgreSQL是否一致 如果版本不一致,預檢查會有提醒。可以根據提醒對本地PostgreSQL進行升級或降級,也可以繼續遷移
數據庫可用性檢查 檢查待遷移數據庫在目標RDS For PostgreSQL是否已存在 如果待遷移數據庫命名規範不滿足RDS實例要求,那麼DTS在目標RDS實例創建待遷移數據庫會報錯失敗,即數據庫可用性檢查會失敗。此時可以參考 庫表列映射 對遷移數據庫進行重命名
源庫權限檢查 檢查任務配置時,提供的本地PostgreSQL數據庫賬號的權限是否滿足要求 如果檢查失敗,那麼請參考本文 遷移賬號創建 一節對遷移賬號進行授權後,重新進行預檢查
目的庫權限檢查 檢查任務配置時,提供的目的RDS For PostgreSQL數據庫賬號的權限是否滿足要求 如果檢查失敗,那麼請參考本文 遷移賬號創建 一節對遷移賬號進行授權後,重新進行預檢查
同名對象存在性檢查 檢查待遷移對象在目標RDS For PostgreSQL實例中是否已經存在 如果檢查失敗,請將目標庫中這些已經存在的對象刪除後,重新進行預檢查
源端同名對象存在性檢查 檢查要遷移到同一個數據庫中的多個對象是否重名 如果檢查失敗,可以參考 庫表列映射 將重名對象進行重命名
約束完整性檢查 檢查待遷移對象依賴的父對象是否遷移 如果檢查失敗,那麼可以修改遷移對象,同時遷移依賴的父對象後,重新預檢查
增量拓撲衝突檢查 檢查同一個遷移對象是否已經存在遷移鏈路 如果存在衝突鏈路,那麼需要刪除掉衝突鏈路後,重新預檢查
LC_MONETERY 一致性檢查 檢查源庫、目標庫的Lc_monetery定義是否一致 如果檢查失敗,可以修改目標RDS For PostgreSQL的LC_MONETERY定義,或者繼續遷移
PostgreSQL邏輯流複製插件檢查 檢查本地PostgreSQL實例是否安裝了邏輯流複製插件 如果檢查失敗,可以參考下麵的 邏輯流複製插件安裝 一節安裝邏輯流複製插件後重新預檢查
PostgreSQL邏輯流slot存在性檢查 檢查本地PostgreSQL實例存在跟DTS創建的replication slot重名的replication slot 如果檢查失敗,可以刪除本地PostgreSQL中已經存在的同名replication slot後,重新預檢查

最後更新:2016-11-23 16:03:55

  上一篇:go Oracle到PPAS不停機數據遷移__數據遷移_用戶指南_數據傳輸-阿裏雲
  下一篇:go 從本地MongoDB遷移到MongoDB實例__數據遷移_用戶指南_數據傳輸-阿裏雲