本文為您介紹如何同步 OceanBase 資料庫(MySQL 和 Oracle 租戶)的資料至 DataHub。
前提條件
資料轉送已具備雲資源存取權限。詳情請參見 資料轉送遷移角色授權。
已為源端 OceanBase 資料庫建立專用於資料同步任務的資料庫使用者,並為其賦予了相關許可權。詳情請參見 建立資料庫使用者。
使用限制
選擇全量同步時,資料轉送僅支援同步具有唯一鍵的表。
同步 DDL 僅支援 BLOB 類型的 Topic。
資料同步過程中,資料轉送支援刪除表之後再建立表,即支援對已經同步的表進行
DROP TABLE
操作後,再執行CREATE TABLE
。資料轉送不支援通過重新命名的方式建立表,即不支援執行RENAME TABLE a TO a_tmp
操作。資料轉送支援字元集配置為 UTF-8 和 GBK 的資料同步。
待同步的表名和其中的列名不能包含中文字元。
資料轉送僅支援同步庫名、表名和列名為 ASCII 碼且不包含特殊字元(包括換行、空格,以及 .|"'`()=;/&\)的對象。
資料轉送不支援 OceanBase 備庫作為源端。
DataHub 相關的使用限制如下:
DataHub 官方限制一條訊息的具體大小取決於雲環境,通常為 1 MB。由於是攢批發送,DataHub 限制一次只能發送 4 MB 的訊息。
注意事項
在源端為 OceanBase 資料庫並開啟同步 DDL 的資料同步任務中,如果源端庫表發生重新命名(
RENAME
)操作,建議您重新啟動任務,避免增量同步處理遺失資料。當 OceanBase 資料庫 V4.x 進行增量同步處理時,如果產生列沒有標記 STORED 屬性,Tuple 類型的 Topic 寫入到目標端為 NULL,而 BLOB 類型的 Topic 目標端不會寫入該列。
當更新的行包括 LOB 列時:
如果 LOB 列為更新列,請勿依賴 LOB 列在
UPDATE
或DELETE
操作前的值。目前使用 LOB 列進行儲存的資料類型包括 JSON、GIS、XML、UDT(使用者定義型別),以及 LONGTEXT、MEDIUMTEXT 等各類 TEXT。
如果 LOB 列為非更新列,LOB 列在
UPDATE
或DELETE
操作前或操作後的值均為 NULL。
如果在建立資料同步任務時,您僅配置了 增量同步處理,資料轉送要求源端資料庫的本地增量日誌儲存 48 小時以上。
如果在建立資料同步任務時,您配置了 全量同步+增量同步處理,資料轉送要求源端資料庫的本地增量日誌至少保留 7 天以上。否則資料轉送可能因無法擷取增量日誌而導致資料同步任務失敗,甚至導致源端和目標端資料不一致。
同步 OceanBase 資料庫的增量資料至 DataHub 時,其中包含表結構至 DataHub Schema 的初始化 Schema。下表為 DataHub 資料類型的支援情況,僅適用於 Tuple 類型的 Topic。
類型
描述
範圍
BIGINT
8 位元組有符號整型
-9223372036854775807 ~ 9223372036854775807
DOUBLE
8 位元組雙精確度浮點數
-1.0 _10^308 ~ 1.0 _10^308
BOOLEAN
布爾類型
True/False
true/false
0/1
TIMESTAMP
時間戳記類型
表示到微秒的時間戳記類型
STRING
字串,僅支援 UTF-8 編碼
單個 STRING 列最大支援 2 MB
INTEGER
4 位元組整型
-2147483648 ~ 2147483647
FLOAT
4 位元組單精確度浮點數
-3.40292347_10^38 ~ 3.40292347_10^38
DECIMAL
數字型
- 10^38 +1 ~ 10^38 - 1
支援的源端和目標端執行個體類型
下表中,OceanBase 資料庫 MySQL 租戶簡稱為 OB_MySQL,OceanBase 資料庫 Oracle 租戶簡稱為 OB_Oracle。
源端 | 目標端 |
OB_MySQL(OceanBase 叢集執行個體) | DataHub(阿里雲 DataHub 執行個體) |
OB_MySQL(OceanBase 叢集執行個體) | DataHub(VPC 內自建 DataHub 執行個體) |
OB_MySQL(OceanBase 叢集執行個體) | DataHub(公網 DataHub 執行個體) |
OB_MySQL(Serverless 執行個體) | DataHub(阿里雲 DataHub 執行個體) |
OB_MySQL(Serverless 執行個體) | DataHub(VPC 內自建 DataHub 執行個體) |
OB_MySQL(Serverless 執行個體) | DataHub(公網 DataHub 執行個體) |
OB_Oracle(OceanBase 叢集執行個體) | DataHub(阿里雲 DataHub 執行個體) |
OB_Oracle(OceanBase 叢集執行個體) | DataHub(VPC 內自建 DataHub 執行個體) |
OB_Oracle(OceanBase 叢集執行個體) | DataHub(公網 DataHub 執行個體) |
同步 DDL 支援的範圍
同步 DDL 僅支援 BLOB 類型的 Topic。
修改表
ALTER TABLE
添加列
ADD COLUMN
修改列的長度
MODIFY COLUMN
刪除列
DROP COLUMN
建立索引
CREATE INDEX
刪除索引
DROP INDEX
清空表
TRUNCATE
說明延遲刪除情境下,同一個事務中會有兩條一樣的
TRUNCATE TABLE
DDL。此時,下遊消費需要按照等冪方式處理。
資料類型映射
目前同步的 DataHub 類型僅支援 INTEGER、BIGINT、TIMESTAMP、FLOAT、DOUBLE、DECIMAL、STRING 和 BOOLEAN。
如果您選擇建立 Topic 的映射方式時,建立了其他類型的 Topic,會導致資料同步失敗。
本文表格中提供的預設映射規則為最合適的映射。如果您改變映射,可能會產生報錯。
OceanBase 資料庫 MySQL 租戶和 DataHub 之間的資料類型映射
OceanBase 資料庫 MySQL 租戶 | 預設映射 DataHub 類型 |
BIT | STRING(Base 64 編碼) |
CHAR | STRING |
BINARY | STRING(Base 64 編碼) |
VARBINARY | STRING(Base 64 編碼) |
INT | BIGINT |
TINYINT | BIGINT |
SMALLINT | BIGINT |
MEDIUMINT | BIGINT |
BIGINT | DECIMAL(因為無符號超過 Java 中的 LONG 大小) |
FLOAT | DECIMAL |
DOUBLE | DECIMAL |
DECIMAL | DECIMAL |
DATE | STRING |
TIME | STRING |
YEAR | BIGINT |
DATETIME | STRING |
TIMESTAMP | TIMESTAMP(使用毫秒級時間戳記展示) |
VARCHAR | STRING |
TINYBLOB | STRING(Base 64 編碼) |
TINYTEXT | STRING |
BLOB | STRING(Base 64 編碼) |
TEXT | STRING |
MEDIUMBLOB | STRING(Base 64 編碼) |
MEDIUMTEXT | STRING |
LONGBLOB | STRING(Base 64 編碼) |
LONGTEXT | STRING |
ENUM | STRING |
SET | STRING |
OceanBase 資料庫 Oracle 租戶和 DataHub 之間的資料類型映射
OceanBase 資料庫 Oracle 租戶 | 預設映射 DataHub 類型 |
CHAR | STRING |
NCHAR | STRING |
VARCHAR2 | STRING |
NVARCHAR2 | STRING |
CLOB | STRING |
NCLOB | STRING |
BLOB | STRING(Base 64 編碼) |
NUMBER | DECIMAL |
BINARY_FLOAT | DECIMAL |
BINARY_DOUBLE | DECIMAL |
DATE | STRING |
TIMESTAMP | STRING |
TIMESTAMP WITH TIME ZONE | STRING |
TIMESTAMP WITH LOCAL TIME ZONE | STRING |
INTERVAL YEAR TO MONTH | STRING |
INTERVAL DAY TO SECOND | STRING |
LONG | STRING(Base 64 編碼) |
RAW | STRING(Base 64 編碼) |
LONG RAW | STRING(Base 64 編碼) |
ROWID | STRING |
UROWID | STRING |
FLOAT | DECIMAL |
補充 Properties
如果自行建立 Topic,啟動資料同步任務前,請在 DataHub 的 Schema 中補充下述 Properties。如果由資料轉送自動建立 Topic 和結構同步,資料轉送會自動補充下述 Properties。
該部分內容僅適用於 Tuple 類型的 Topic。
名稱 | 類型 | 含義 |
oms_timestamp | STRING | 發生變更的時間。 |
oms_table_name | STRING | 源端為表時,變更表名。 |
oms_database_name | STRING | 源端為資料庫時,變更庫名。 |
oms_sequence | STRING | 資料至同步進程記憶體中的時間戳記,由時間 + 5 位遞增數字組成。如果發生時鐘回退的情況,會導致資料不一致。 |
oms_record_type | STRING | 變更類型,包括 |
oms_is_before | STRING | 如果是 |
oms_is_after | STRING | 如果是 |
操作步驟
登入 OceanBase 管理主控台,購買資料同步任務。
詳情請參見 購買資料同步任務。
在 資料轉送 > 資料同步 頁面,單擊新購買的資料同步任務後的 配置。
如果您需要引用已有的任務配置資訊,可以單擊 引用配置。詳情請參見 引用和清空資料同步任務配置。
在 選擇源和目標 頁面,配置各項參數。
參數
描述
同步任務名稱
建議使用中文、數字和字母的組合。名稱中不能包含空格,長度不能超過 64 個字元。
標籤(可選)
單擊文字框,在下拉式清單中選擇目標標籤。您也可以單擊 管理標籤 進行建立、修改和刪除。詳情請參見 通過標籤管理資料同步任務。
源端
如果您已建立 OceanBase 資料來源,請從下拉式清單中進行選擇。如果未建立,請單擊下拉式清單中的 建立資料來源,在右側對話方塊進行建立。參數詳情請參見 建立 OceanBase 資料來源。
重要源端不支援 OceanBase 資料庫的 執行個體類型 為 OceanBase 租戶執行個體。
目標端
如果您已建立 DataHub 資料來源,請從下拉式清單中進行選擇。如果未建立,請單擊下拉式清單中的 建立資料來源,在右側對話方塊進行建立。參數詳情請參見 建立 DataHub 資料來源。
單擊 下一步。在 選擇同步類型 頁面,選擇當前資料同步任務的同步類型。
同步類型包括 結構同步、全量同步 和 增量同步處理。其中,結構同步 實際為建立 Topic,增量同步處理 包括 DML 同步(包括
Insert
、Delete
和Update
)和 DDL 同步,您可以根據需求進行自訂配置。詳情請參見 自訂配置 DDL/DML。說明如果您在此處選擇了 DDL 同步,則 選擇同步對象 頁面的 Topic 類型僅支援選擇 BLOB。
單擊 下一步。在 選擇同步對象 頁面,選擇當前資料同步任務需要同步的 Topic 類型和對象。
Topic 類型包括 Tuple 和 BLOB。Tuple 類型的 Topic 不支援同步 DDL,支援類似於資料庫記錄的資料,每條記錄包含多個列。BLOB 類型的 Topic 僅支援寫入一塊位元據作為一個 Record,資料將會以 BASE64 編碼傳輸。詳情請參見 DataHub 官方文檔。
選擇需要同步的 Topic 類型後,您可以通過 指定對象 和 匹配規則 兩個入口選擇同步對象。本文為您介紹通過 指定對象 方式選擇同步對象的具體操作,配置匹配規則的詳情請參見 配置匹配規則 中庫到訊息佇列的通配規則說明和配置方式。
說明如果您在 選擇同步類型 步驟已勾選 DDL 同步,建議通過匹配規則方式選擇同步對象,以確保所有符合約步對象規則的新增對象都將被同步。如果您通過指定對象方式選擇同步對象,則新增對象或重新命名後的對象將不會被同步。
在 選擇同步對象 地區,選中 指定對象。
在選擇地區左側選中需要同步的對象。
單擊 >。
根據業務需求,選擇映射方式。
如果您需要同步 Tuple 類型的單張表或同步 BLOB 類型的表,請在 將對象映射至 Topic 對話方塊中,選擇需要的映射方式進行配置,單擊 確定。
如果選擇同步類型時未勾選 結構同步,則僅支援選擇 已有 Topic。如果選擇同步類型時已選擇 結構同步,則僅支援選擇一種映射方式進行 Topic 的建立或選擇。
例如,已選擇結構同步的情況下,您使用了建立 Topic 和選擇已有 Topic 兩種映射方式,或通過重新命名的方式更改了 Topic 的名稱,會因為選項衝突導致預檢查報錯。
參數
描述
建立 Topic
在文字框中輸入建立 Topic 的名稱。支援 128 位以內的字母、數字或底線(_),且必須以字母開頭。
選擇 Topic
資料轉送提供查詢 DataHub Topic 的能力,您可以單擊 選擇 Topic,在 已有 Topic 下拉式清單中,搜尋並選中需要同步的 Topic。
批量產生 Topic
批量產生 Topic 的規則為
Topic_${Database Name}_${Table Name}
。如果您選擇 建立 Topic 或 批量產生 Topic,結構同步成功後,在 DataHub 側能夠查詢到建立的 Topic。其分區數量預設為 2 個,資料到期時間預設為 7 天,且不支援修改。
如果您需要同步 Tuple 類型的多張表,請在彈出的對話方塊中,單擊 確定。
如果您選擇 Tuple 類型的 Topic 但未勾選 結構同步,選擇多張表時,需要在 將對象映射至 Topic 對話方塊中選擇一個已有 Topic 並單擊 確定。
此時,右側一個 Topic 下會顯示多張表,但實際僅支援同步一張表。單擊 下一步,介面會彈出提示:Tuple 類型的 Topic 與表僅支援 One to One 映射關係。
資料轉送支援通過文本匯入對象,並支援對目標端對象進行重新命名、設定行過濾、移除單個對象或全部對象等操作。目標端對象的結構為 Topic>Database>Table。
說明通過 匹配規則 方式選擇同步對象時,重新命名能力由匹配規則文法覆蓋,操作處僅支援設定過濾條件,以及選擇分區列和需要同步的列。詳情請參見 配置匹配規則。
操作
步驟
匯入對象
在選擇地區的右側列表中,單擊右上方的 匯入對象。
在對話方塊中,單擊 確定。
重要匯入會覆蓋之前的操作選擇,請謹慎操作。
在 匯入同步對象 對話方塊中,匯入需要同步的對象。 您可以通過匯入 CSV 檔案的方式進行庫表重新命名、設定行過濾條件等操作。詳情請參見 下載和匯入同步對象配置。
單擊 檢驗合法性。
通過合法性的檢驗後,單擊 確定。
更改 Topic
選擇 Topic 類型為 BLOB 時,支援對目標對象變更 Topic 操作。詳情請參見 更改 Topic。
設定
資料轉送支援
WHERE
條件實現行過濾,以及選擇分區列和需要同步的列。在選擇地區的右側列表中,滑鼠移至上方至目標表對象。
單擊顯示的 設定。
在 設定 對話方塊中,您可以進行以下操作。
在 行過濾條件 地區的文字框中,輸入標準的 SQL 陳述式中的
WHERE
子句,來配置行過濾。詳情請參見 SQL 條件過濾資料。在 分區列 下拉式清單中,選擇目標分區列。您可以選擇多個欄位作為分區列,該參數為可選。
選擇分區列時,如果沒有特殊情況,預設選擇主鍵即可。如果存在主鍵負載不均衡的情況,請選擇唯一性標識且負載相對均衡的欄位作為分區列,避免潛在的效能問題。分區列的主要作用如下:
負載平衡:在目標端可以進行並發寫入的情況下,通過分區列區分發送訊息需要使用的特定線程。
有序性:由於存在並發寫入可能導致的無序問題,資料轉送確保在分區列的值相同的情況下,使用者接收到的訊息是有序的。此處的有序是指變更順序(DML 對於一列的執行順序)。
在 選擇列 地區,選擇需要同步的列。詳情請參見 列過濾。
單擊 確定。
移除/全部移除
資料轉送支援在資料對應時,對暫時選中到目標端的單個或多個對象進行移除操作。
移除單個同步對象
在選擇地區的右側列表中,滑鼠移至上方至目標對象,單擊顯示的 移除,即可移除該同步對象。
移除全部同步對象
在選擇地區的右側列表中,單擊右上方的 全部移除。在對話方塊中,單擊 確定,即可移除全部同步對象。
單擊 下一步。在 同步選項 頁面,配置各項參數。
全量同步
在 選擇同步類型 頁面,選中 全量同步,才會顯示下述參數。
參數
描述
讀取並發配置
該參數用於配置全量同步階段從源端讀取資料的並發數,最大限制為 512.並發數過高可能會造成源端壓力過大,影響業務。
寫入並發配置
該參數用於配置全量同步階段往目標端寫入資料的並發數,最大限制為 512。並發數過高可能會造成目標端壓力過大,影響業務。
全量同步速率限制
您可以根據實際需求決定是否開啟全量同步速率限制。如果開啟,請設定 RPS(全量同步階段每秒最多可以同步至目標端的資料行數的最大值限制)和 BPS(全量同步階段每秒最多可以同步至目標端的資料量的最大值限制)。
說明此處設定的 RPS 和 BPS 僅作為限速限流能力,全量同步實際可以達到的效能受限於源端、目標端、執行個體規格配置等因素的影響。
增量同步處理
在 選擇同步類型 頁面,選中 增量同步處理,才會顯示下述參數。
參數
描述
寫入並發配置
該參數用於配置增量同步處理階段往目標端寫入資料的並發數,最大限制為 512。並發數過高可能會造成目標端壓力過大,影響業務。
增量同步處理速率限制
您可以根據實際需求決定是否開啟增量同步處理速率限制。如果開啟,請設定 RPS(增量同步處理階段每秒最多可以同步至目標端的資料行數的最大值限制)和 BPS(增量同步處理階段每秒最多可以同步至目標端的資料量的最大值限制)。
說明此處設定的 RPS 和 BPS 僅作為限速限流能力,增量同步處理實際可以達到的效能受限於源端、目標端、執行個體規格配置等因素的影響。
增量同步處理起始位點
如果選擇同步類型時已選擇 全量同步,該參數不會顯示。
如果選擇同步類型時未選擇 全量同步,但選擇了 增量同步處理,請在此處指定同步某個時間節點之後的資料,預設為當前系統時間。詳情請參見 設定增量同步處理位點。
進階選項
參數
描述
序列化方式
控制資料同步至 DataHub 的訊息格式,目前支援 Default、Canal、DataWorks(支援 V2.0)、SharePlex、DefaultExtendColumnType、Debezium、DebeziumFlatten 和 DebeziumSmt。詳情請參見 序列化方式的格式說明。
重要僅在 選擇同步對象 頁面,選擇 Topic 類型為 BLOB 時,才會顯示該參數。
目前僅 OceanBase 資料庫 MySQL 租戶支援 Debezium、DebeziumFlatten 和 DebeziumSmt。
分區規則
同步源端資料至 DataHub Topic 的規則,目前支援 Hash 和 Table。推薦您選擇 Table,以確保下遊在消費訊息時,不會出現 DDL 與 DML 消費不統一的情況。
Hash 表示資料轉送使用一定的 Hash 演算法,根據主索引值或分區列值 Hash 選擇 DataHub 的 Shard。
Table 表示資料轉送將一張表中的全部資料投遞至同一個分區中,以表名作為 Hash 鍵。
說明如果在 選擇同步類型 頁面選擇了 同步 DDL,則分區規則僅支援 Table。
業務系統標識(可選)
僅選擇 序列化方式 為 DataWorks 時,會顯示該參數,用於標識資料的業務系統來源,以便您後續進行自訂處理。該業務系統標識的長度限制為 1~20 個字元。
單擊 預檢查。
在 預檢查 環節,資料轉送僅檢查列名、列類型,以及是否為空白,不檢查長度和預設值。如果預檢查報錯:
您可以在排查並處理問題後,重新執行預檢查,直至預檢查成功。
您也可以單擊錯誤預檢查項操作列中的 跳過,會彈出對話方塊提示您跳過本操作的具體影響,確認可以跳過後,請單擊對話方塊中的 確定。
預檢查成功後,單擊 啟動任務。
如果您暫時無需啟動任務,請單擊 儲存。後續您只能在 同步工作清單 頁面手動啟動任務或通過大量操作啟動任務。大量操作的詳情請參見 大量操作資料同步任務。
資料轉送支援在資料同步任務運行過程中修改同步對象,詳情請參見 查看和修改同步對象及其過濾條件。資料同步任務啟動後,會根據選擇的同步類型依次執行,詳情請參見 查看同步詳情。
如果資料同步任務運行報錯(通常由於網路不通或進程啟動過慢導致),您可以在資料同步任務的列表或詳情頁面,單擊 恢複。