支持的源和目標數據庫
| 源數據庫 | 目標數據庫 |
|---|---|
| DDS 3.4/4.0(分片集群) 自建MongoDB 3.4/4.0/4.2/4.4/5.0/6.0(分片集群) |
DDS 3.4/4.0(分片集群) 自建MongoDB 3.4/4.0/4.2/4.4/5.0/6.0(分片集群) |
支持的遷移對象及SQL
遷移對象
- 當前DTS支持集合級(指定集合對象)、庫級(整庫遷移)遷移。
- 支持索引的結構遷移。
- 庫、集合支持做名稱映射。
- 不支持遷移admin和local庫中的數據。
- 數據遷移僅針對數據源中的用戶數據庫,而系統庫會被自動過濾。
- 支持TAG和RANGE相關內容的遷移,源端和目標端的SHARD按照名稱的字典序映射。
增量遷移支持的SQL操作
-
DML
INSERT、UPDATE、REPLACE、DELETE。
-
DDL
當前不支持增量遷移過程中的DDL操作。
數據庫賬號及權限
數據庫 所需權限 參考賦權語句 源庫
全量:
mongos用戶需要具備admin庫的readAnyDatabase權限,config庫的read權限;
連接shard的用戶需要有admin庫的readAnyDatabase權限,有local庫的read權限。
增量:
mongos用戶需要具備admin庫的readAnyDatabase權限,config庫的read權限;
連接shard的用戶需要具備admin庫的readAnyDatabase權限、clusterMonitor權限,local庫的read權限。
全量:
db.grantRolesToUser("用戶名",[{role:"readAnyDatabase",db:"admin"}, {role:"read",db:"config"}])
db.grantRolesToUser("用戶名",[{role:"readAnyDatabase",db:"admin"}, {role:"read",db:"local"}])
增量:
db.grantRolesToUser("用戶名",[{role:"readAnyDatabase",db:"admin"}, {role:"read",db:"config"}])
db.grantRolesToUser("用戶名",[{role:"readAnyDatabase",db:"admin"}, {role:"clusterMonitor",db:"admin"},{role:"read",db:"local"}])
目標庫
mongos用戶需要具備admin庫的dbAdminAnyDatabase權限,admin庫的readWriteAnyDatabase權限以及有admin庫的clusterManager權限。
db.grantRolesToUser("用戶名",[{role:"dbAdminAnyDatabase",db:"admin"}, {role:"readWriteAnyDatabase",db:"admin"},{role:"clusterManager",db:"admin"}])
遷移規則須知
- 暫不支持同步包含TTL(Time To Live)索引的集合。若待同步的數據庫中包含TTL索引,則可能會由于源庫和目標庫時區、時鐘等的不一致,導致數據不一致。
- 不保留事務信息,即源庫中的事務同步到目標庫時會轉變為單條的記錄。
- 源端的分片信息會作為目標端分片的依據進行分片鍵的處理。
- 用戶手動配置的任務為主任務,DTS會自動為源端每個分片建立獨立的遷移子任務,在主任務詳情中可以通過主子任務列表查詢每個分片的遷移子任務信息。
操作須知
- 源庫須開啟Oplog日志。
- 源端、目標端實例的運行狀態、復制狀態必須正常。
- 在遷移時,如果源庫、目標庫進行主備切換,將會導致任務異常。
- 選擇表級對象遷移時,增量遷移過程中不允許對表進行重命名操作。
- 如遷移對象為表級別,則單次遷移任務僅支持遷移最多1000張表。當超出數量限制,任務可能會報錯。如果遇到這種情形,建議您拆分待遷移的表,分批配置成多個任務,或者配置為整庫遷移。
- 在DTS遷移期間,不允許有除DTS外的數據寫入目標庫,否則會導致源庫與目標庫數據不一致。
- 目標庫若已存在行數據,DTS在增量遷移過程中源庫相同主鍵的數據將覆蓋目標庫已存在的數據,因此在遷移前需要用戶自行判斷數據是否需要清除,建議用戶在遷移前自行清空目標庫。
- 在磁盤空間允許的情況下,建議源數據庫oplog保存大小或時間越大越好。否則DTS在增量遷移時可能因無法獲取oplog而導致任務失敗。如果由于您所設置的oplog日志保存策略低于DTS要求的時間進而導致的問題,不在DTS的SLA保障范圍內。
- 遷移過程中,不允許修改、刪除連接源和目標數據庫的用戶的用戶名、密碼、權限,或修改源和目標數據庫的端口號。
- 全量初始化會并發執行INSERT操作,導致目標數據庫的集合產生碎片,因此全量初始化完成后目標實例的集合空間比源實例的集合空間大。建議目標庫的存儲空間比源庫大10%以上。
- 建議源和目標庫的MongoDB的數據庫版本保持一致,或者從低版本同步到高版本以保障兼容性。如為高版本同步至低版本,可能存在數據庫兼容性問題。
- 執行數據遷移前需評估源庫和目標庫的性能,同時建議業務低峰期執行數據遷移,否則全量數據初始化時將占用源庫和目標庫一定的讀寫資源,可能會導致數據庫的負載上升。
操作步驟
1、購買DTS數據遷移實例。
在管理控制臺點擊“創建實例”進入訂購頁面,“實例類型”選擇“數據遷移”,網絡接入類型可以選擇“VPC網絡”或“公網EIP”,網絡接入類型不同時,操作步驟如下:
- 當網絡接入類型選擇“VPC網絡”時,“目標庫實例”的“數據庫類型”選擇“DDS/MongoDB”,并在“選擇實例”下拉框中選擇數據庫實例(請注意選擇數據庫架構類型為分片集群的實例),選擇“鏈路類型”、“鏈路規格”,完成其他信息的填寫并完成購買。
- 當網絡接入類型選擇“公網EIP”時,可以通過“選擇數據庫實例”或“輸入IP地址及端口”兩種方式之一來設置目標庫實例:
- 當按“選擇數據庫實例”方式時,在“選擇實例”下拉框中選擇數據庫實例(請注意選擇數據庫架構類型為分片集群的實例),選擇“鏈路類型”、“鏈路規格”,完成其他信息的填寫并完成購買。
- 當按“輸入IP地址及端口”方式時,“數據庫類型”選擇DDS/MongoDB后,會出現“數據庫架構類型”的選項,請選擇“分片集群”,然后在mongos信息中填寫IP地址、端口(最多允許填寫16組),選擇“鏈路類型”、“鏈路規格”,完成其他信息的填寫并完成購買。
說明文檔數據庫有副本集、分片集群等不同的架構,在網絡訪問方面與其他數據庫相比具有一定的差異性,遷移前請您詳細閱讀遷移數據到天翼云DDS數據庫的網絡準備章節內容,了解并做好網絡方面的準備工作。
2、進入實例配置頁面。
DTS實例購買成功后,進入【數據遷移】實例列表頁面,上一步驟購買成功的實例在實例列表中顯示狀態為“待配置”,進入實例配置頁面的操作分兩種情況:
- 當DTS實例的網絡接入類型為“公網EIP”時,請先點擊“綁定彈性IP”按鈕完成公網彈性IP的綁定,然后點擊該實例操作列的“實例配置”按鈕。
- 當DTS實例網絡接入類型為“VPC網絡”時,直接點擊該實例操作列的“實例配置”按鈕。
3、配置源庫及目標庫信息。
進入實例配置第一個步驟的【配置源庫及目標庫信息】頁面,填入源庫與目標庫的相關配置信息:
- 源庫:“數據庫類型”請選擇DDS/MongoDB,選擇資源池,“數據庫架構類型”請選擇分片集群,輸入源庫IP地址、端口、鑒權數據庫名稱(默認為admin)、數據庫賬號、數據庫密碼、shard接入信息(支持填寫多個IP:Port,請確保所填寫的多個IP地址屬于同一個分片。格式:IP和Port之間以英文冒號分隔,多組IP:Port之間用英文逗號隔開。例如:192.168.0.1:8080,192.168.0.2:8080)、shard賬號、shard密碼等。
- 目標庫:輸入鑒權數據庫名稱(默認為admin)、數據庫賬號、數據庫密碼。
完成上述信息的填寫后,點擊源數據庫和目標數據庫的“測試連接”按鈕進行數據庫連接測試,檢查數據庫能否正常連接。
4、配置遷移對象及高級配置。
源庫和目標庫連通性測試成功后,點下一步按鈕,進入實例配置第二個步驟的【配置遷移對象及高級配置】頁面,在“源庫對象”中選擇要遷移的源庫對象,包含:DATABASE、COLLECTION,選中后點擊“>”按鈕,將待遷移對象移動到“已選擇對象”中。
說明關于配置遷移對象及高級配置頁面的詳細說明,請參考數據傳輸服務 - 用戶指南 - 數據遷移 - 實例管理 - 配置遷移實例文檔中配置遷移對象及高級配置詳細說明。
5、預檢查和啟動遷移。
完成遷移對象和高級配置后,點擊“下一步預檢查”,進入實例配置第三個步驟的【預檢查】頁面。預檢查會檢查如下列表信息,并給出檢查結果,用戶可以依據檢查結果進行下一步操作。
| 檢查項 | 檢查內容 |
|---|---|
| DDS/MongoDB版本檢查 | 檢查源庫和目標庫的DDS/MongoDB版本是不是符合要求。 |
| 源庫Balancer關閉檢查 | 檢查源庫Balancer是否關閉。 |
| 源庫包含TTL的索引檢查 | 檢查源庫是否存在TTL索引的集合,若存在,則導致遷移后數據不一致。 |
| 源庫shard用戶權限檢查 | 檢查源庫用于DTS任務的shard用戶是否具有相應的權限。 |
| 源庫分片集群孤兒文檔檢查 | 檢查源庫孤兒文檔是否清理。 |
| 源庫和目標庫固定集合一致性檢查 | 源庫和目標庫固定集合需要保持一致,否則遷移失敗。 |
| 源庫映射后對象名長度校驗 | 校驗源數據庫映射后遷移對象名是否超過63位。 |
| 源庫映射后的庫名、集合名檢查 | 檢查源庫映射后的庫名、集合名是否符合規范。 |
| 源庫用戶權限檢查 | 檢查源庫用于DTS任務的用戶是否具有相應的權限。 |
| 源庫連通性檢查 | 檢查數據傳輸服務DTS能否連通源數據庫。 |
| 源庫集合的唯一索引個數檢查 | 檢查源庫的集合唯一索引數是否大于1。 |
| 源庫集合的索引個數檢查 | 檢查源數據庫是否存在索引數量大于10的集合。 |
| 目標庫同名數據庫的同名非空集合檢查 | 檢查目標數據庫是否存在與源庫數據庫同名的同名非空集合,若存在,會導致已存在數據庫被覆蓋,無法完成遷移。 |
| 目標庫實例狀態檢查 | 檢查目標數據庫實例的狀態是否正常,目標庫實例狀態必須正常。 |
| 目標庫用戶權限檢查 | 檢查目標庫用于DTS任務的用戶是否具有相應的權限。 |
| 目標庫磁盤空間檢查 | 檢查目標數據庫是否有足夠的磁盤空間。 |
| 目標庫連通性檢查 | 檢查數據傳輸服務DTS能否連通目標數據庫。 |
如果預檢查通過,可點擊【預檢查】頁面底部的“啟動遷移”按鈕,開始遷移任務。