支持的源和目標數據庫
| 源數據庫 | 目標數據庫 |
|---|---|
| RDS for PostgreSQL 自建PostgreSQL?9.4/9.5/9.6/10/11/12/13/14/15/16 |
RDS for PostgreSQL 自建PostgreSQL?9.4/9.5/9.6/10/11/12/13/14/15/16 |
說明
自建PostgreSQL/RDS PostgreSQL數據庫版本為9.4/9.5/9.6/10/11/12/13/14/15/16,且源數據庫和目標數據庫的大版本需保持一致。
支持同步的SQL操作
-
DML
INSERT、UPDATE、DELETE。
-
DDL
增量同步的DDL操作僅支持CREATE TABLE、ALTER TABLE、DROP TABLE、CREATE SEQUENCE、ALTER SEQUENCE、DROP SEQUENCE、CREATE VIEW、ALTER VIEW、DROP VIEW、CREATE INDEX、ALTER INDEX、DROP INDEX。
注意
暫不支持 CREATE TABLE 表名 AS SELECT 語句。
RENAME表名之后,向更改名稱后的表插入新的數據時,DTS不會同步新的數據到目標庫,因可能會導致任務中斷異常或數據不一致。
暫不支持以注釋開頭的DDL語句的同步。
僅正向同步(源庫同步至目標庫)支持DDL,反向同步(目標庫同步至源庫)不支持同步DDL,將自動過濾DDL操作。
數據庫賬號及權限
數據庫 所需權限 參考賦權語句 源庫 正向同步(源庫同步至目標庫)所需權限:
模式的USAGE權限制。
待遷移對象的SELECT權限包含增量時,需具備SUPERUSER權限。
反向同步(目標庫同步至源庫)所需權限:
schema的創建權限。
正向同步(源庫同步至目標庫)參考賦權語句:
授予user_name用戶schema_name模式的usage權限:
GRANT USAGE ON SCHEMA schema_name TO user_name;
授予user_name用戶object_name對象的select權限:
GRANT SELECT ON object_name TO user_name;
授予user_name用戶超級權限:
ALTER USER user_name WITH SUPERUSER;
反向同步(目標庫同步至源庫)參考賦權語句:
授予用戶user_name在數據庫database_name下的schema創建權限:
GRANT CREATE ON DATABASE database_name TO user_name;
目標庫 正向同步(源庫同步至目標庫)所需權限:
schema的創建權限。
反向同步(目標庫同步至源庫)所需權限:
模式的USAGE權限。
待遷移對象的SELECT權限包含增量時,需具備SUPERUSER權限。
正向同步(源庫同步至目標庫)參考賦權語句:
授予用戶user_name在數據庫database_name下的schema創建權限:
GRANT CREATE ON DATABASE database_name TO user_name;
反向同步(目標庫同步至源庫)參考賦權語句:
授予user_name用戶schema_name模式的usage權限:
GRANT USAGE ON SCHEMA schema_name TO user_name;
授予user_name用戶object_name對象的select權限:
GRANT SELECT ON object_name TO user_name;
授予user_name用戶超級權限:
ALTER USER user_name WITH SUPERUSER;
準備工作
源庫為PostgreSQL自建庫的情況
針對源庫、目標庫是自建庫的情況,需要進行如下準備工作:
-
登錄自建PostgreSQL所屬的服務器。
-
修改配置文件postgresql.conf,將配置文件中的wal_level設置為logical。
-
將DTS的IP地址加入至自建PostgreSQL的配置文件pg_hba.conf中。如下圖:
如果您已將信任地址配置為0.0.0.0/0,可跳過本步驟。
-
邏輯解碼插件目前支持decoderbufs和pgoutput;如果任務包含增量遷移且邏輯解碼器選擇使用Decoderbufs時,需安裝PostgreSQL的邏輯解碼器輸出插件Decoderbufs,建議安裝v2.1.1.Final以上版本,低版本可能會導致PostgreSQL數據庫出現coredump,詳細的步驟可參考如下內容或PostgreSQL官網文檔。
-
請自行前往github倉庫獲取Decoderbufs插件。
-
進行插件的配置。
-
首先,進行插件的編譯。
export PATH=/usr/lib/postgresql/9.6/bin:$PATH make make install -
其次,在postgresql.conf中配置邏輯復制。
# MODULES shared_preload_libraries = 'decoderbufs' # REPLICATION wal_level = logical # minimal, archive, hot_standby, or logical (change requires restart) max_wal_senders = 8 # max number of walsender processes (change requires restart) wal_keep_segments = 4 # in logfile segments, 16MB each; 0 disables #wal_sender_timeout = 60s # in milliseconds; 0 disables max_replication_slots = 4 # max number of replication slots (change requires restart) -
然后,重啟PostgreSQL。
-
最后,驗證配置是否生效。
#創建邏輯復制,使用邏輯復制插件decoderbufs select * from pg_create_logical_replication_slot('decoderbufs_demo', 'decoderbufs'); #對相關表進行數據操作 #使用decoderbufs調試模式 SELECT data FROM pg_logical_slot_peek_changes('decoderbufs_demo', NULL, NULL, 'debug-mode', '1'); #使用decoderbufs獲取wal變更,更新wal位置 SELECT data FROM pg_logical_slot_get_changes('decoderbufs_demo', NULL, NULL, 'debug-mode', '1'); #查看邏輯復制的wal位置 SELECT * FROM pg_replication_slots WHERE slot_type = 'logical'; #刪除邏輯復制 select pg_drop_replication_slot("decoderbufs_demo");
-
-
數據類型映射說明。
PostgreSQL類型 Decoderbuf字段 BOOLOID datum_boolean INT2OID datum_int32 INT4OID datum_int32 INT8OID datum_int64 OIDOID datum_int64 FLOAT4OID datum_float FLOAT8OID datum_double NUMERICOID datum_double CHAROID datum_string VARCHAROID datum_string BPCHAROID datum_string TEXTOID datum_string JSONOID datum_string XMLOID datum_string UUIDOID datum_string TIMESTAMPOID datum_string TIMESTAMPTZOID datum_string BYTEAOID datum_bytes POINTOID datum_point PostGIS geometry datum_point PostGIS geography datum_point
-
源庫為天翼云及其他云PostgreSQL的情況
源庫為天翼云及其他云PostgreSQL、任務包含增量遷移,且邏輯解碼器選擇為Decoderbufs時,源庫需開啟邏輯解碼器輸出插件Decoderbufs。
- 天翼云在開通PostgreSQL實例時已預置開啟Decoderbufs插件,當源庫為天翼云PostgreSQL時,請你參照天翼云關系數據庫PostgreSQL版-管理插件相關指引查看確認Decoderbufs插件的開啟情況,已開啟則無需進行操作,未開啟則參照指引進行Decoderbufs插件的安裝。
- 當源庫為其他云PostgreSQL時,需要查看源庫對應版本是否支持并已開啟Decoderbufs插件。如源庫版本不支持Decoderbufs插件則無法進行其他云PostgreSQL到天翼云PostgreSQL的增量遷移;如源庫版本支持Decoderbufs插件但未開啟則按照文檔啟用插件;如已開啟則無需進行操作。具體請參考其他云PostgreSQL的相關指引,例如:
- 華為云的相關指引。
- 阿里云的相關指引。
源庫要求
- 源數據庫的分區表觸發器不可以設置為disable。
- 全量同步支持源庫備機狀態,但需要設置hot_standby_feedback為on;增量同步不支持源庫備機狀態。
- 同步對象依賴和關聯的對象也須一起同步,否則可能導致任務失敗。
- 若要做增量同步,源數據庫的“pg_hba.conf” 文件中包含如下的配置:
- host replication all 0.0.0.0/0 md5源數據庫參數wal_level必須配置為logical;
- 如果配置任務時邏輯解碼指定為Decoderbufs,源數據庫需提前安裝Decoderbufs插件;
- 源數據庫中無主鍵表的replica identity屬性必須為full;
- 源數據庫的max_replication_slots參數值必須大于當前已使用的復制槽數量;
- 源數據庫的max_wal_senders參數值必須等于或大于max_replication_slots參數值;
- 源數據庫中表的主鍵列toast屬性為main、external、extended時,其replica identity屬性必須為full。
- 同步對象依賴和關聯的對象也須一起同步,否則可能導致任務失敗。
目標庫要求
- 目標數據庫的block_size參數值必須大于或等于源庫中的對應參數值。
- 目標數據庫和源數據庫的lc_monetary參數值一致。
- 若要做增量同步,且同步對象包含外鍵、觸發器或事件觸發器,則目標數據庫的session_replication_role參數必須設置為replica,同步結束后,此參數需改為origin。
- 目標庫不可以包含與待同步對象類型相同且名稱相同的對象,包括模式、表、序列等,否則任務可能出差。系統庫、系統模式、系統表等除外。
- 選擇表級對象遷移時,增量遷移過程中不建議對表進行重命名操作。
- 對于全量+增量和增量任務,啟動前請確保源庫中未啟動長事務,啟動長事務會阻塞邏輯復制槽的創建,進而引發任務失敗。
- 若選擇同步DDL,須注意源庫執行DDL時,確保在目標庫上是兼容的。
- 目標數據庫關聯RDS實例必須有足夠的磁盤空間,磁盤大小建議取以下兩種中的最小值:
- 源庫待遷移數據量大小的1.5倍。
- 源庫待遷移數據量大小加200GB。
操作須知
- 雙向同步是在全量同步完成后才開始進行,全量同步完成之前,目標庫只能讀不能寫,否則會導致源庫與目標庫數據不一致。待全量同步完成后,目標庫可讀可寫。
- DTS為了防止雙向回環同步,會在源庫和目標庫分別創建回環標記表public.ctyun_circle_check,請勿操作此表。
沖突檢測
正向和反向都可以選擇如下沖突修復策略,DTS根據用戶配置的沖突修復策略進行沖突的檢測和處理:
-
TaskFailed(遇到沖突,任務報錯退出)。
當數據同步遇到沖突時,同步任務直接報錯并退出,同步任務進入失敗狀態,需要您介入修復任務。
-
Ignore(遇到沖突,直接使用目標實例中的沖突記錄)。
當數據同步遇到沖突時,直接跳過當前同步語句,繼續往下執行,選擇使用目標庫中的沖突記錄。
-
Overwrite(遇到沖突,直接覆蓋目標實例中的沖突記錄)。
當數據同步遇到沖突時,直接覆蓋目標庫中的沖突記錄。
說明如果同步任務暫停或者重啟后存在延遲,在延遲期間,這些策略均不生效,默認覆蓋目標端數據。
操作步驟
1、購買DTS數據同步實例。
在管理控制臺點擊“創建實例”進入訂購頁面,“實例類型”選擇“數據同步”,“目標庫實例”的“數據庫類型”選擇PostgreSQL,選擇實例,選擇網絡接入類型等,完成其他信息的填寫并完成購買。
2、進入實例配置頁面。
DTS實例購買成功后,進入【數據遷移】實例列表頁面,上一步驟購買成功的實例在實例列表中顯示狀態為“待配置”,進入實例配置頁面的操作分兩種情況:
- 當DTS實例的網絡接入類型為“公網EIP”時,請先點擊“綁定彈性IP”按鈕完成公網彈性IP的綁定,然后點擊該實例操作列的“實例配置”按鈕。
- 當DTS實例網絡接入類型為“VPC網絡”時,直接點擊該實例操作列的“實例配置”按鈕。
3、配置源庫及目標庫信息。
進入實例配置第一個步驟的【配置源庫及目標庫信息】頁面,填入源庫與目標庫的相關配置信息,源庫數據庫類型選擇PostgreSQL,完成IP地址端口、數據庫賬號、數據庫密碼等信息的填寫。
完成上述信息的填寫后可以進行數據庫的連接測試,測試數據庫能否正常連接。
4、配置同步對象及高級配置。
源庫和目標庫連通性測試成功后,點下一步按鈕,進入實例配置第二個步驟的【配置同步對象及高級配置】頁面,同步拓撲選擇“雙向同步",沖突修復策略按需進行選擇,沖突修復策略參見本文沖突檢測章節內容;支持邏輯解碼插件的選擇:目前邏輯解碼插件支持“decoderbufs”和“pgoutput”,默認勾選“decoderbufs”。
5、預檢查。
點擊“下一步預檢查”,進入【預檢查】頁面。預檢查會檢查如下列表信息,并給出檢查結果,用戶可以依據檢查結果進行下一步操作。
方向 檢查項 檢查內容 正向預檢查
lc_monetary參數配置一致性檢查 檢查源庫與目標庫的lc_monetary參數配置是否一致。 pg版本檢查 檢查源庫和目標庫的pg版本是不是符合要求。 同名對象存在性檢查 檢查目標庫中是否存在和待遷移庫同名的待遷移對象。 擴展插件兼容性檢查 檢查源庫中安裝的擴展插件,在目標庫是否存在。 檢查hot_standby_feedback參數配置 全量同步源庫pg為備節點時,hot_standby_feedback參數需配置為ON。 源庫用戶權限檢查 檢查源庫用于DTS任務的用戶是否具有相應的權限。 源庫連通性檢查 檢查數據傳輸服務器能否連通源數據庫。 源數據庫的模式名表名是否合法 檢查源數據庫的模式名表名是否合法,名稱不可以包含+"%'<>,.字符。 源庫參數wal_level是否為logical 勾選增量同步時,檢查源庫wal_level參數值是否為logical。 目標庫用戶權限檢查 檢查目標庫用于DTS任務的用戶是否具有相應的權限。 目標庫連通性檢查 檢查數據傳輸服務器能否連通目標數據庫。 源庫參數max_replication_slots校驗 勾選增量同步時,檢查源庫max_replication_slots參數值是否大于當前已使用的復制槽數量。 源庫參數max_wal_senders校驗 勾選增量同步時,檢查源庫max_wal_senders參數值是否大于當前已使用的復制槽數量。 邏輯解碼插件安裝校驗 勾選增量同步時,如果邏輯解碼器為decoderbufs,檢查源庫是否安裝邏輯解碼插件decoderbufs。 待同步表是否存在主鍵檢查 勾選增量同步時,檢查待同步表中是否存在無主鍵的表。 無日志表存在性檢查 勾選增量同步時,檢查當前選擇的待同步對象中的表是否存在無日志表。 源庫主備狀態檢查 勾選增量同步時,檢查源庫是否為集群中的主庫。 ddl同步元數據檢查 勾選ddl同步時,檢查源庫是否有ddl同步所需的元數據對象。 反向預檢查 待同步表REPLICA_IDENTITY模式檢查 檢查待同步表REPLICA_IDENTITY值是否都為FULL。 無日志表存在性檢查 校驗待同步對象中是否存在無日志表。 校驗源庫參數wal_level是否為logical 校驗源庫參數wal_level是否為logical。 源庫主備狀態檢查 勾選增量時,源庫pg必須為主節點。 源庫參數max_replication_slots校驗 源庫“max_replication_slots”參數值必須大于當前已使用的復制槽數量。否則,可能導致同步失敗。 源庫參數max_wal_senders校驗 源數據庫“max_wal_senders”參數值必須大于當前已使用的復制槽數量。否則,可能會導致同步失敗。 源庫用戶權限檢查 檢查源庫用于DTS任務的用戶是否具有相應的權限。 目標庫用戶權限檢查 檢查目標庫用于DTS任務的用戶是否具有相應的權限。 邏輯解碼插件安裝校驗 如果邏輯解碼器為decoderbufs,檢查源數據庫是否安裝邏輯解碼插件decoderbufs。
6、確認配置和啟動
預檢查通過后,點擊“下一步”進入【確認配置】頁面,用戶可確認配置的所有信息,確認無誤后,點擊右下角的【啟動任務】,開始遷移任務。