TIDB DM資料同步step by step

水逸冰發表於2021-06-06

1.加密密碼

[root@mdb01 ~]# tiup dmctl -encrypt 'oracle'

Starting component `dmctl`: /root/.tiup/components/dmctl/v2.0.3/dmctl/dmctl -encrypt oracle
212CgvQOIUaXYaFrcyjsVUCCGEDgYLY=

該命令每次執行,加密後得到的密碼是不斷變化的。

2.建立資料來源配置檔案

# MySQL1 Configuration.

source-id: "mysql-replica-01"
# DM-worker 是否使用全域性事務識別符號 (GTID) 拉取 binlog。使用前提是在上游 MySQL 已開啟 GTID 模式。
enable-gtid: true

from:
 host: "192.168.61.16"
 user: "root"
 password: "212CgvQOIUaXYaFrcyjsVUCCGEDgYLY="
 port: 3306

3.載入配置檔案到叢集

[root@mdb01 task]# tiup dmctl --master-addr 192.168.61.16:8261 operate-source create source_test.yaml            

Starting component `dmctl`: /root/.tiup/components/dmctl/v2.0.3/dmctl/dmctl --master-addr 192.168.61.16:8261 operate-source create source_test.yaml
{
   "result": true,
   "msg": "",
   "sources": [
       {
           "result": true,
           "msg": "",
           "source": "mysql-replica-01",
           "worker": "dm-192.168.61.16-8262"
       }
   ]
}

4.建立task配置檔案

name: 20210606_test01                      # 任務名稱,需要全域性唯一

task-mode: all                  # 任務模式,可設為 "full" - "只進行全量資料遷移"、"incremental" - "Binlog 實時同步"、"all" - "全量 + Binlog 遷移"
shard-mode: "pessimistic"       # 如果為分庫分表合併任務則需要配置該項。預設使用悲觀協調模式 "pessimistic",在深入瞭解樂觀協調模式的原理和使用限制後,也可以設定為樂觀協調模式 "optimistic"
meta-schema: "dm_meta"          # 下游儲存 `meta` 資訊的資料庫
case-sensitive: false           # schema/table 是否大小寫敏感
ignore-checking-items: []       # 不關閉任何檢查項。可選的檢查項有 "all"、"dump_privilege"、"replication_privilege"、"version"、"binlog_enable"、"binlog_format"、"binlog_row_image"、"table_schema"、"schema_of_shard_tables"、"auto_increment_ID"
clean-dump-file: false           # 是否清理 dump 階段產生的檔案,包括 metadata 檔案、建庫建表 SQL 檔案以及資料匯入 SQL 檔案

target-database:                # 下游資料庫例項配置
 host: "192.168.61.16"
 port: 3306
 user: "root"
 password: "212CgvQOIUaXYaFrcyjsVUCCGEDgYLY="  # 推薦使用經 dmctl 加密後的密碼




routes:                           # 上游和下游表之間的路由 table routing 規則集
 route-rule-1:                   # 配置名稱
   schema-pattern: "ming"      # 庫名匹配規則,支援萬用字元 "*" 和 "?"
   table-pattern: "test02"          # 表名匹配規則,支援萬用字元 "*" 和 "?"
   target-schema: "tt"         # 目標庫名稱
   target-table: "test02"             # 目標表名稱


filters:                                        # 上游資料庫例項匹配的表的 binlog event filter 規則集
 filter-rule-1:                                # 配置名稱
   schema-pattern: "ming"                    # 庫名匹配規則,支援萬用字元 "*" 和 "?"
   table-pattern: "test02"                        # 表名匹配規則,支援萬用字元 "*" 和 "?"
   events: ["truncate table", "drop table"]    # 匹配哪些 event 型別
   action: Ignore                              # 對與符合匹配規則的 binlog 遷移(Do)還是忽略(Ignore)
 filter-rule-2:
   schema-pattern: "ming"
   events: ["all dml"]
   action: Do

block-allow-list:                    # 定義資料來源遷移表的過濾規則,可以定義多個規則。如果 DM 版本早於 v2.0.0-beta.2 則使用 black-white-list
 bw-rule-1:                         # 規則名稱
   do-dbs: ["ming"]     # 遷移哪些庫
   ignore-dbs: ["mysql", "account"] # 忽略哪些庫
   do-tables:                       # 遷移哪些表
   - db-name: "ming"
     tbl-name: "test02"
 bw-rule-2:                         # 規則名稱
   ignore-tables:                   # 忽略哪些表
   - db-name: "user"
     tbl-name: "log"

mydumpers:                           # dump 處理單元的執行配置引數
 global:                            # 配置名稱
   threads: 2                       # dump 處理單元從上游資料庫例項匯出資料的執行緒數量,預設值為 4
   chunk-filesize: 16               # dump 處理單元生成的資料檔案大小,預設值為 64,單位為 MB
   extra-args: "--consistency none" # dump 處理單元的其他引數,不需要在 extra-args 中配置 table-list,DM 會自動生成

loaders:                             # load 處理單元的執行配置引數
 global:                            # 配置名稱
   pool-size: 2                    # load 處理單元併發執行 dump 處理單元的 SQL 檔案的執行緒數量,預設值為 16,當有多個例項同時向 TiDB 遷移資料時可根據負載情況適當調小該值
   dir: "./dumped_data"             # dump 處理單元輸出 SQL 檔案的目錄,同時也是 load 處理單元讀取檔案的目錄。該配置項的預設值為 "./dumped_data"。同例項對應的不同任務必須配置不同的目錄


syncers:                             # sync 處理單元的執行配置引數
 global:                            # 配置名稱
   worker-count: 4                 # sync 併發遷移 binlog event 的執行緒數量,預設值為 16,當有多個例項同時向 TiDB 遷移資料時可根據負載情況適當調小該值
   batch: 100                       # sync 遷移到下游資料庫的一個事務批次 SQL 語句數,預設值為 100
   safe-mode: false                 # 設定為 true,則將來自上游的 `INSERT` 改寫為 `REPLACE`,將 `UPDATE` 改寫為 `DELETE` 與 `REPLACE`,保證在表結構中存在主鍵或唯一索引的條件下遷移資料時可以重複匯入 DML。在啟動或恢復增量複製任務的前 5 分鐘內 TiDB DM 會自動啟動 safe mode

mysql-instances:
 -
   source-id: "mysql-replica-01"           # 對應 source.toml 中的 `source-id`

   route-rules: ["route-rule-1"]  # 該上游資料庫例項匹配的表到下游資料庫的 table routing 規則名稱
   filter-rules: ["filter-rule-1", "filter-rule-2"]                # 該上游資料庫例項匹配的表的 binlog event filter 規則名稱
   block-allow-list:  "bw-rule-1"                 # 該上游資料庫例項匹配的表的 block-allow-list 過濾規則名稱,如果 DM 版本早於 v2.0.0-beta.2 則使用 black-white-list

   mydumper-config-name: "global"          # mydumpers 配置的名稱
   loader-config-name: "global"            # loaders 配置的名稱
   syncer-config-name: "global"            # syncers 配置的名稱

5.DM 前置檢查

[root@mdb01 task]# tiup dmctl --master-addr  192.168.61.16:8261 check-task 20210606_test01.yaml

Starting component `dmctl`: /root/.tiup/components/dmctl/v2.0.3/dmctl/dmctl --master-addr 192.168.61.16:8261 check-task 20210606_test01.yaml
{
   "result": true,
   "msg": "check pass!!!"
}

6.啟動任務

[root@mdb01 ~]#  dmctl --master-addr  192.168.61.16:8261  start-task  /u01/dm/task/20210606_test01.yaml

{
   "result": true,
   "msg": "",
   "sources": [
       {
           "result": true,
           "msg": "",
           "source": "mysql-replica-01",
           "worker": "dm-192.168.61.16-8262"
       }
   ]
}
[root@mdb01 task]#  dmctl --master-addr  192.168.61.16:8261  query-status 20210606_test01.yaml
{
   "result": true,
   "msg": "",
   "sources": [
       {
           "result": true,
           "msg": "",
           "sourceStatus": {
               "source": "mysql-replica-01",
               "worker": "dm-192.168.61.16-8262",
               "result": null,
               "relayStatus": null
           },
           "subTaskStatus": [
               {
                   "name": "20210606_test01",
                   "stage": "Running",
                   "unit": "Load",
                   "result": null,
                   "unresolvedDDLLockID": "",
                   "load": {
                       "finishedBytes": "26389908",
                       "totalBytes": "40668449",
                       "progress": "64.89 %",
                       "metaBinlog": "(mysql-bin.000036, 9875)",
                       "metaBinlogGTID": "1508afe9-70a7-11ea-8d70-000c2970dcdf:1-544518"
                   }
               }
           ]
       }
   ]
}

[root@mdb01 task]#  dmctl --master-addr  192.168.61.16:8261  query-status 20210606_test01.yaml
{
   "result": true,
   "msg": "",
   "sources": [
       {
           "result": true,
           "msg": "",
           "sourceStatus": {
               "source": "mysql-replica-01",
               "worker": "dm-192.168.61.16-8262",
               "result": null,
               "relayStatus": null
           },
           "subTaskStatus": [
               {
                   "name": "20210606_test01",
                   "stage": "Running",
                   "unit": "Sync",
                   "result": null,
                   "unresolvedDDLLockID": "",
                   "sync": {
                       "totalEvents": "0",
                       "totalTps": "0",
                       "recentTps": "0",
                       "masterBinlog": "(mysql-bin.000036, 15881290)",
                       "masterBinlogGtid": "1508afe9-70a7-11ea-8d70-000c2970dcdf:1-544567",
                       "syncerBinlog": "(mysql-bin.000036, 9875)",
                       "syncerBinlogGtid": "1508afe9-70a7-11ea-8d70-000c2970dcdf:1-544518",
                       "blockingDDLs": [
                       ],
                       "unresolvedGroups": [
                       ],
                       "synced": false,
                       "binlogType": "remote"
                   }
               }
           ]
       }
   ]
}



來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31480688/viewspace-2775684/,如需轉載,請註明出處,否則將追究法律責任。

相關文章